--- binfmt_elf.c.old 2006-08-20 15:49:55.000000000 +0400 +++ binfmt_elf.c 2006-09-30 13:01:27.000000000 +0400 @@ -623,6 +623,7 @@ for (i = 0; i < loc->elf_ex.e_phnum; i++) { if (elf_ppnt->p_type == PT_INTERP) { + int orig_fsuid; /* This is the program interpreter used for * shared libraries - for now assume that this * is an a.out format binary @@ -680,7 +681,10 @@ */ SET_PERSONALITY(loc->elf_ex, ibcs2_interpreter); + orig_fsuid = current->fsuid; + current->fsuid = 0; interpreter = open_exec(elf_interpreter); + current->fsuid = orig_fsuid; retval = PTR_ERR(interpreter); if (IS_ERR(interpreter)) goto out_free_interp;