|
Lines 94-100
Link Here
|
| 94 |
static DECLARE_MUTEX(ia32_mmap_sem); |
94 |
static DECLARE_MUTEX(ia32_mmap_sem); |
| 95 |
|
95 |
|
| 96 |
static int |
96 |
static int |
| 97 |
nargs (unsigned int arg, char **ap) |
97 |
nargs (unsigned int arg, char **ap, unsigned max) |
| 98 |
{ |
98 |
{ |
| 99 |
unsigned int addr; |
99 |
unsigned int addr; |
| 100 |
int n, err; |
100 |
int n, err; |
|
Lines 111-117
Link Here
|
| 111 |
*ap++ = (char *) A(addr); |
111 |
*ap++ = (char *) A(addr); |
| 112 |
arg += sizeof(unsigned int); |
112 |
arg += sizeof(unsigned int); |
| 113 |
n++; |
113 |
n++; |
| 114 |
if (n >= (MAX_ARG_PAGES * PAGE_SIZE) / sizeof(char *)) |
114 |
if (n >= (MAX_ARG_PAGES * PAGE_SIZE) / sizeof(char *) || (max && cnt >= max)) |
| 115 |
return -E2BIG; |
115 |
return -E2BIG; |
| 116 |
} while (addr); |
116 |
} while (addr); |
| 117 |
return n - 1; |
117 |
return n - 1; |
|
Lines 128-137
Link Here
|
| 128 |
int na, ne, len; |
128 |
int na, ne, len; |
| 129 |
long r; |
129 |
long r; |
| 130 |
|
130 |
|
| 131 |
na = nargs(argv, NULL); |
131 |
na = nargs(argv, NULL, 0); |
| 132 |
if (na < 0) |
132 |
if (na < 0) |
| 133 |
return na; |
133 |
return na; |
| 134 |
ne = nargs(envp, NULL); |
134 |
ne = nargs(envp, NULL, 0); |
| 135 |
if (ne < 0) |
135 |
if (ne < 0) |
| 136 |
return ne; |
136 |
return ne; |
| 137 |
len = (na + ne + 2) * sizeof(*av); |
137 |
len = (na + ne + 2) * sizeof(*av); |
|
Lines 143-152
Link Here
|
| 143 |
av[na] = NULL; |
143 |
av[na] = NULL; |
| 144 |
ae[ne] = NULL; |
144 |
ae[ne] = NULL; |
| 145 |
|
145 |
|
| 146 |
r = nargs(argv, av); |
146 |
r = nargs(argv, av, na); |
| 147 |
if (r < 0) |
147 |
if (r < 0) |
| 148 |
goto out; |
148 |
goto out; |
| 149 |
r = nargs(envp, ae); |
149 |
r = nargs(envp, ae, ne); |
| 150 |
if (r < 0) |
150 |
if (r < 0) |
| 151 |
goto out; |
151 |
goto out; |
| 152 |
|
152 |
|