On Wed, 2007-02-21 at 15:41 -0800, Andrew Morton wrote:Something like so? Boots uml seemingly without errors. --- Rewrite remove_arg_zero() to be more parseable by untwisted minds. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> --- fs/exec.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) Index: linux-2.6/fs/exec.c =================================================================== --- linux-2.6.orig/fs/exec.c 2007-03-07 21:54:17.000000000 +0100 +++ linux-2.6/fs/exec.c 2007-03-07 23:08:27.000000000 +0100 @@ -987,28 +987,34 @@ void compute_creds(struct linux_binprm * EXPORT_SYMBOL(compute_creds); +/* + * Arguments are '\0' separated strings found at the location bprm->p + * points to; chop off the first by relocating brpm->p to right after + * the first '\0' encountered. + */ void remove_arg_zero(struct linux_binprm *bprm) { - if (bprm->argc) { - unsigned long offset; - char * kaddr; - struct page *page; + unsigned long offset; + char *kaddr; + struct page *page; - offset = bprm->p % PAGE_SIZE; - goto inside; + if (!bprm->argc) + return; + + do { + offset = bprm->p & ~PAGE_MASK; + page = bprm->page[bprm->p >> PAGE_SHIFT]; + kaddr = kmap_atomic(page, KM_USER0); + + for (; offset < PAGE_SIZE && kaddr[offset]; + offset++, bprm->p++) + ; - while (bprm->p++, *(kaddr+offset++)) { - if (offset != PAGE_SIZE) - continue; - offset = 0; - kunmap_atomic(kaddr, KM_USER0); -inside: - page = bprm->page[bprm->p/PAGE_SIZE]; - kaddr = kmap_atomic(page, KM_USER0); - } kunmap_atomic(kaddr, KM_USER0); - bprm->argc--; - } + } while (offset == PAGE_SIZE); + + bprm->p++; + bprm->argc--; } EXPORT_SYMBOL(remove_arg_zero); -
| Jens Axboe | Re: [BUG] New Kernel Bugs |
| KAMEZAWA Hiroyuki | Re: 2.6.24-rc3-mm1 |
| Tarkan Erimer | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
git: | |
| Gerrit Renker | [PATCH 0/37] dccp: Feature negotiation - last call for comments |
| Jarek Poplawski | [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Jarek Poplawski | Re: [BUG #12364] Re: HTB - very bad precision? HFSC works fine! 2.6.28 |
| Alexey Dobriyan | Re: [GIT]: Networking |
