diff -NurpP --minimal linux-2.4.24-vs1.25/fs/open.c linux-2.4.24-vs1.26/fs/open.c --- linux-2.4.24-vs1.25/fs/open.c 2004-02-06 00:18:04.000000000 +0100 +++ linux-2.4.24-vs1.26/fs/open.c 2004-02-06 20:23:36.000000000 +0100 @@ -478,7 +478,7 @@ asmlinkage long sys_fchmod(unsigned int err = -EPERM; if ((inode->i_mode & 0777) == 0 && S_ISDIR(inode->i_mode) - && !vx_check(0, VX_ADMIN)) + && IS_IMMUTABLE_LINK(inode) && !vx_check(0, VX_ADMIN)) goto out_putf; err = -EROFS; if (IS_RDONLY(inode)) @@ -512,7 +512,7 @@ asmlinkage long sys_chmod(const char * f error = -EPERM; if ((inode->i_mode & 0777) == 0 && S_ISDIR(inode->i_mode) - && !vx_check(0, VX_ADMIN)) + && IS_IMMUTABLE_LINK(inode) && !vx_check(0, VX_ADMIN)) goto dput_and_out; error = -EROFS;