Do not trip a KASSERT if /dev/null cannot be opened for a setuid program.
The fdcheckstd() function makes sure fds 0, 1 and 2 are open by opening /dev/null. If this fails (e.g. missing devfs or wrong permissions), fdcheckstd() will return failure and the process will exit as if it received SIGABRT. The KASSERT is only to check that kern_open() returns the expected fd, given that it succeeded. Tripping the KASSERT is most likely if fd 0 is open but fd 1 or 2 are not. MFC after: 2 weeks
This commit is contained in:
parent
219762ba49
commit
90750179ec
@ -2024,10 +2024,10 @@ fdcheckstd(struct thread *td)
|
||||
error = kern_open(td, "/dev/null", UIO_SYSSPACE,
|
||||
O_RDWR, 0);
|
||||
devnull = td->td_retval[0];
|
||||
KASSERT(devnull == i, ("oof, we didn't get our fd"));
|
||||
td->td_retval[0] = save;
|
||||
if (error)
|
||||
break;
|
||||
KASSERT(devnull == i, ("oof, we didn't get our fd"));
|
||||
} else {
|
||||
error = do_dup(td, DUP_FIXED, devnull, i, &retval);
|
||||
if (error != 0)
|
||||
|
Loading…
Reference in New Issue
Block a user