aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorAlex Richardson <arichardson@FreeBSD.org>2021-02-15 22:09:33 +0000
committerAlex Richardson <arichardson@FreeBSD.org>2021-02-15 22:55:12 +0000
commit0482d7c9e944433abc98fc27a265ae762abce9a0 (patch)
treed1de1bcd220809fddaf1c96aa29e2dd4f7d11e22 /sys
parenta7b42c4b7f7ad7bd1b22ab57ed9185bdcea6f0a2 (diff)
downloadsrc-0482d7c9e944433abc98fc27a265ae762abce9a0.tar.gz
src-0482d7c9e944433abc98fc27a265ae762abce9a0.zip
Fix fget_only_user() to return ENOTCAPABLE on a failed capsicum check
After eaad8d1303da500ed691bd774742a4555a05e729 four additional capsicum-test tests started failing. It turns out this is because fget_only_user() was returning EBADF on a failed capsicum check instead of forwarding the return value of cap_check_inline() like fget_unlocked_seq(). capsicum-test failures before this: ``` [ FAILED ] 7 tests, listed below: [ FAILED ] Capability.OperationsForked [ FAILED ] Capability.NoBypassDAC [ FAILED ] Pdfork.OtherUserForked [ FAILED ] PipePdfork.WildcardWait [ FAILED ] OpenatTest.WithFlag [ FAILED ] ForkedOpenatTest_WithFlagInCapabilityMode._ [ FAILED ] Select.LotsOFileDescriptorsForked ``` After: ``` [ FAILED ] 3 tests, listed below: [ FAILED ] Capability.NoBypassDAC [ FAILED ] Pdfork.OtherUserForked [ FAILED ] PipePdfork.WildcardWait ``` Reviewed By: mjg MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D28691
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/kern_descrip.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c
index 059e5123c7b5..43cedfe2199b 100644
--- a/sys/kern/kern_descrip.c
+++ b/sys/kern/kern_descrip.c
@@ -3214,7 +3214,7 @@ fget_only_user(struct filedesc *fdp, int fd, cap_rights_t *needrightsp,
haverights = cap_rights_fde_inline(fde);
error = cap_check_inline(haverights, needrightsp);
if (__predict_false(error != 0))
- return (EBADF);
+ return (error);
*fpp = fp;
return (0);
}