summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2022-07-20 18:52:02 +0000
committercinap_lenrek <cinap_lenrek@felloff.net>2022-07-20 18:52:02 +0000
commit4063334e6f121b42b0e28fcbdd3108d040893fee (patch)
tree49170e0ba5eae74ace1c4065d4136b69bd65e778 /sys
parent951ab17262c61dca249baf5aca1810b55117e684 (diff)
pc/rtc: make sure string is NUL terminates for rtc write
Diffstat (limited to 'sys')
-rw-r--r--sys/src/9/pc/devrtc.c15
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);
/*