Fix fchange in zpl_ioctl_setflags

The fchange in zpl_ioctl_setflags was for detecting flag change. However it
was incorrect and would always fail to detect a flag change from set to unset,
causing users without CAP_LINUX_IMMUTABLE to be able to unset flags.

Signed-off-by: Chunwei Chen <david.chen@osnexus.com>
This commit is contained in:
Chunwei Chen 2016-12-16 12:41:56 -08:00
parent 05100ec8f0
commit c360af5411

View File

@ -737,8 +737,7 @@ zpl_ioctl_getflags(struct file *filp, void __user *arg)
* is outside of our jurisdiction. * is outside of our jurisdiction.
*/ */
#define fchange(f0, f1, b0, b1) ((((f0) & (b0)) == (b0)) != \ #define fchange(f0, f1, b0, b1) (!((f0) & (b0)) != !((f1) & (b1)))
(((b1) & (f1)) == (f1)))
static int static int
zpl_ioctl_setflags(struct file *filp, void __user *arg) zpl_ioctl_setflags(struct file *filp, void __user *arg)