diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-08-06 11:48:51 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-08-06 11:48:51 +0200 |
commit | b09cd6786047e4572f98a7703992fe96e4312da7 (patch) | |
tree | 04f0d8201424f71950fc4b924a975f933d638843 /sys/src/9/port/sysproc.c | |
parent | d275add1a89e77c69ef10bd6ed239b48c693bc42 (diff) |
kernel: validnamedup() the name argument for segattach()
this moves the name validation out of segattach() to syssegattach()
to make sure the segment name cannot be changed by the user while
segattach looks at it.
Diffstat (limited to 'sys/src/9/port/sysproc.c')
-rw-r--r-- | sys/src/9/port/sysproc.c | 11 |
1 files changed, 10 insertions, 1 deletions
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 |