summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/9/port/segment.c3
-rw-r--r--sys/src/9/port/sysproc.c11
2 files changed, 10 insertions, 4 deletions
diff --git a/sys/src/9/port/segment.c b/sys/src/9/port/segment.c
index d7124caef..a9eb26eaf 100644
--- a/sys/src/9/port/segment.c
+++ b/sys/src/9/port/segment.c
@@ -604,9 +604,6 @@ segattach(Proc *p, ulong attr, char *name, uintptr va, uintptr len)
if(va != 0 && va >= USTKTOP)
error(Ebadarg);
- validaddr((uintptr)name, 1, 0);
- vmemchr(name, 0, ~0);
-
for(sno = 0; sno < NSEG; sno++)
if(p->seg[sno] == nil && sno != ESEG)
break;
diff --git a/sys/src/9/port/sysproc.c b/sys/src/9/port/sysproc.c
index 597398cb9..0a71a0c03 100644
--- a/sys/src/9/port/sysproc.c
+++ b/sys/src/9/port/sysproc.c
@@ -775,7 +775,16 @@ syssegattach(va_list list)
name = va_arg(list, char*);
va = va_arg(list, uintptr);
len = va_arg(list, ulong);
- return segattach(up, attr, name, va, len);
+ validaddr((uintptr)name, 1, 0);
+ name = validnamedup(name, 1);
+ if(waserror()){
+ free(name);
+ nexterror();
+ }
+ va = segattach(up, attr, name, va, len);
+ free(name);
+ poperror();
+ return va;
}
uintptr