[PATCH] Invalid notify_change(symlink, [ATTR_MODE]) in nfsd

From: Andreas Gruenbacher
Date: Tue May 04 2004 - 10:03:51 EST


notify_change() gets called with at most the ATTR_MODE flag set for
symlinks, but it should be called with the ATTR_MODE flag cleared.
This triggers a bug in fs/reiserfs/xattr_acl.c (reiserfs plus acl
patches), and perhaps on other file systems, too. (On ext2/ext3 symlinks
have no ->setattr, there the bug does not trigger.)

int
reiserfs_acl_chmod (struct inode *inode)
{
struct posix_acl *acl, *clone;
int error;

==> if (S_ISLNK(inode->i_mode))
==> return -EOPNOTSUPP;


This is the fix -- please apply.

Index: linux-2.6.6-rc3/fs/nfsd/vfs.c
===================================================================
--- linux-2.6.6-rc3.orig/fs/nfsd/vfs.c
+++ linux-2.6.6-rc3/fs/nfsd/vfs.c
@@ -1212,7 +1212,7 @@ nfsd_symlink(struct svc_rqst *rqstp, str
if (EX_ISSYNC(fhp->fh_export))
nfsd_sync_dir(dentry);
if (iap) {
- iap->ia_valid &= ATTR_MODE /* ~(ATTR_MODE|ATTR_UID|ATTR_GID)*/;
+ iap->ia_valid &= ~ATTR_MODE;
if (iap->ia_valid) {
iap->ia_valid |= ATTR_CTIME;
iap->ia_mode = (iap->ia_mode&S_IALLUGO)


Cheers,
--
Andreas Gruenbacher <agruen@xxxxxxx>
SUSE Labs, SUSE LINUX AG

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/