diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2022-07-20 18:52:02 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2022-07-20 18:52:02 +0000 |
commit | 4063334e6f121b42b0e28fcbdd3108d040893fee (patch) | |
tree | 49170e0ba5eae74ace1c4065d4136b69bd65e778 /sys/src/9/pc | |
parent | 951ab17262c61dca249baf5aca1810b55117e684 (diff) |
pc/rtc: make sure string is NUL terminates for rtc write
Diffstat (limited to 'sys/src/9/pc')
-rw-r--r-- | sys/src/9/pc/devrtc.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/sys/src/9/pc/devrtc.c b/sys/src/9/pc/devrtc.c index 5d092066f..f8de9531d 100644 --- a/sys/src/9/pc/devrtc.c +++ b/sys/src/9/pc/devrtc.c @@ -227,26 +227,25 @@ rtcwrite(Chan* c, void* buf, long n, vlong off) char *a, *start; Rtc rtc; ulong secs; + char *cp, sbuf[32]; uchar bcdclock[Nbcd]; - char *cp, *ep; ulong offset = off; if(offset!=0) error(Ebadarg); - switch((ulong)c->qid.path){ case Qrtc: /* * read the time */ - cp = ep = buf; - ep += n; - while(cp < ep){ - if(*cp>='0' && *cp<='9') + if(n >= sizeof(sbuf)) + error(Ebadarg); + strncpy(sbuf, buf, n); + sbuf[n] = '\0'; + for(cp = sbuf; *cp != '\0'; cp++) + if(*cp >= '0' && *cp <= '9') break; - cp++; - } secs = strtoul(cp, 0, 0); /* |