From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Hellwig Subject: [PATCH] backout the xattr override access checks flag Date: Thu, 20 Feb 2003 22:20:07 -0500 Sender: linux-fsdevel-owner@vger.kernel.org Message-ID: <20030220222007.A21678@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: linux-fsdevel@vger.kernel.org Return-path: To: torvalds@transmeta.com, agruen@suse.de Content-Disposition: inline List-Id: linux-fsdevel.vger.kernel.org This check backs out the XATTR_KERNEL_CONTEXT that tells filesystems to ignore the lack of capabilities of the caller that went in in the last week (through akpm..). It's a cludgy interface design to have flags that change access checks, and there's a much easier way by raising the capabilities in the process that actually needs this in kernel mode (not that such code even exists yet). Something even better would probably be to move out the xattr access checks to common code.. --- 1.12/fs/xattr.c Sat Feb 15 03:24:02 2003 +++ edited/fs/xattr.c Thu Feb 20 19:27:15 2003 @@ -160,7 +160,7 @@ if (error) goto out; down(&d->d_inode->i_sem); - error = d->d_inode->i_op->getxattr(d, kname, kvalue, size, 0); + error = d->d_inode->i_op->getxattr(d, kname, kvalue, size); up(&d->d_inode->i_sem); } @@ -233,7 +233,7 @@ if (error) goto out; down(&d->d_inode->i_sem); - error = d->d_inode->i_op->listxattr(d, klist, size, 0); + error = d->d_inode->i_op->listxattr(d, klist, size); up(&d->d_inode->i_sem); } @@ -308,7 +308,7 @@ if (error) goto out; down(&d->d_inode->i_sem); - error = d->d_inode->i_op->removexattr(d, kname, 0); + error = d->d_inode->i_op->removexattr(d, kname); up(&d->d_inode->i_sem); } out: --- 1.4/fs/ext2/acl.c Sat Feb 15 03:24:02 2003 +++ edited/fs/ext2/acl.c Thu Feb 20 19:27:14 2003 @@ -419,7 +419,7 @@ */ static size_t ext2_xattr_list_acl_access(char *list, struct inode *inode, - const char *name, int name_len, int flags) + const char *name, int name_len) { const size_t size = sizeof(XATTR_NAME_ACL_ACCESS); @@ -432,7 +432,7 @@ static size_t ext2_xattr_list_acl_default(char *list, struct inode *inode, - const char *name, int name_len, int flags) + const char *name, int name_len) { const size_t size = sizeof(XATTR_NAME_ACL_DEFAULT); @@ -465,7 +465,7 @@ static int ext2_xattr_get_acl_access(struct inode *inode, const char *name, - void *buffer, size_t size, int flags) + void *buffer, size_t size) { if (strcmp(name, "") != 0) return -EINVAL; @@ -474,7 +474,7 @@ static int ext2_xattr_get_acl_default(struct inode *inode, const char *name, - void *buffer, size_t size, int flags) + void *buffer, size_t size) { if (strcmp(name, "") != 0) return -EINVAL; @@ -482,8 +482,7 @@ } static int -ext2_xattr_set_acl(struct inode *inode, int type, const void *value, - size_t size) +ext2_xattr_set_acl(struct inode *inode, int type, const void *value, size_t size) { struct posix_acl *acl; int error; ===== fs/ext2/xattr.c 1.8 vs edited ===== --- 1.8/fs/ext2/xattr.c Sat Feb 15 03:24:04 2003 +++ edited/fs/ext2/xattr.c Thu Feb 20 19:27:15 2003 @@ -199,7 +199,7 @@ */ ssize_t ext2_getxattr(struct dentry *dentry, const char *name, - void *buffer, size_t size, int flags) + void *buffer, size_t size) { struct ext2_xattr_handler *handler; struct inode *inode = dentry->d_inode; @@ -207,7 +207,7 @@ handler = ext2_xattr_resolve_name(&name); if (!handler) return -EOPNOTSUPP; - return handler->get(inode, name, buffer, size, flags); + return handler->get(inode, name, buffer, size); } /* @@ -217,9 +217,9 @@ * BKL held [before 2.5.x] */ ssize_t -ext2_listxattr(struct dentry *dentry, char *buffer, size_t size, int flags) +ext2_listxattr(struct dentry *dentry, char *buffer, size_t size) { - return ext2_xattr_list(dentry->d_inode, buffer, size, flags); + return ext2_xattr_list(dentry->d_inode, buffer, size); } /* @@ -250,7 +250,7 @@ * BKL held [before 2.5.x] */ int -ext2_removexattr(struct dentry *dentry, const char *name, int flags) +ext2_removexattr(struct dentry *dentry, const char *name) { struct ext2_xattr_handler *handler; struct inode *inode = dentry->d_inode; @@ -258,7 +258,7 @@ handler = ext2_xattr_resolve_name(&name); if (!handler) return -EOPNOTSUPP; - return handler->set(inode, name, NULL, 0, flags | XATTR_REPLACE); + return handler->set(inode, name, NULL, 0, XATTR_REPLACE); } /* @@ -371,8 +371,7 @@ * used / required on success. */ int -ext2_xattr_list(struct inode *inode, char *buffer, size_t buffer_size, - int flags) +ext2_xattr_list(struct inode *inode, char *buffer, size_t buffer_size) { struct buffer_head *bh = NULL; struct ext2_xattr_entry *entry; @@ -412,7 +411,7 @@ handler = ext2_xattr_handler(entry->e_name_index); if (handler) size += handler->list(NULL, inode, entry->e_name, - entry->e_name_len, flags); + entry->e_name_len); } if (ext2_xattr_cache_insert(bh)) @@ -435,7 +434,7 @@ handler = ext2_xattr_handler(entry->e_name_index); if (handler) buf += handler->list(buf, inode, entry->e_name, - entry->e_name_len, flags); + entry->e_name_len); } error = size; ===== fs/ext2/xattr.h 1.4 vs edited ===== --- 1.4/fs/ext2/xattr.h Sat Feb 15 03:24:04 2003 +++ edited/fs/ext2/xattr.h Thu Feb 20 19:27:15 2003 @@ -58,9 +58,9 @@ struct ext2_xattr_handler { char *prefix; size_t (*list)(char *list, struct inode *inode, const char *name, - int name_len, int flags); + int name_len); int (*get)(struct inode *inode, const char *name, void *buffer, - size_t size, int flags); + size_t size); int (*set)(struct inode *inode, const char *name, const void *buffer, size_t size, int flags); }; @@ -69,12 +69,12 @@ extern void ext2_xattr_unregister(int, struct ext2_xattr_handler *); extern int ext2_setxattr(struct dentry *, const char *, const void *, size_t, int); -extern ssize_t ext2_getxattr(struct dentry *, const char *, void *, size_t, int); -extern ssize_t ext2_listxattr(struct dentry *, char *, size_t, int); -extern int ext2_removexattr(struct dentry *, const char *, int); +extern ssize_t ext2_getxattr(struct dentry *, const char *, void *, size_t); +extern ssize_t ext2_listxattr(struct dentry *, char *, size_t); +extern int ext2_removexattr(struct dentry *, const char *); extern int ext2_xattr_get(struct inode *, int, const char *, void *, size_t); -extern int ext2_xattr_list(struct inode *, char *, size_t, int flags); +extern int ext2_xattr_list(struct inode *, char *, size_t); extern int ext2_xattr_set(struct inode *, int, const char *, const void *, size_t, int); extern void ext2_xattr_delete_inode(struct inode *); ===== fs/ext2/xattr_trusted.c 1.1 vs edited ===== --- 1.1/fs/ext2/xattr_trusted.c Sat Feb 15 03:24:04 2003 +++ edited/fs/ext2/xattr_trusted.c Thu Feb 20 19:31:21 2003 @@ -20,7 +20,7 @@ { const int prefix_len = sizeof(XATTR_TRUSTED_PREFIX)-1; - if (!((flags & XATTR_KERNEL_CONTEXT) || capable(CAP_SYS_ADMIN))) + if (!capable(CAP_SYS_ADMIN)) return 0; if (list) { @@ -37,7 +37,7 @@ { if (strcmp(name, "") == 0) return -EINVAL; - if (!((flags & XATTR_KERNEL_CONTEXT) || capable(CAP_SYS_ADMIN))) + if (!capable(CAP_SYS_ADMIN)) return -EPERM; return ext2_xattr_get(inode, EXT2_XATTR_INDEX_TRUSTED, name, buffer, size); @@ -49,7 +49,7 @@ { if (strcmp(name, "") == 0) return -EINVAL; - if (!((flags & XATTR_KERNEL_CONTEXT) || capable(CAP_SYS_ADMIN))) + if (!capable(CAP_SYS_ADMIN)) return -EPERM; return ext2_xattr_set(inode, EXT2_XATTR_INDEX_TRUSTED, name, value, size, flags); ===== fs/ext2/xattr_user.c 1.5 vs edited ===== --- 1.5/fs/ext2/xattr_user.c Sat Feb 15 03:24:03 2003 +++ edited/fs/ext2/xattr_user.c Thu Feb 20 19:27:15 2003 @@ -19,12 +19,11 @@ static size_t ext2_xattr_user_list(char *list, struct inode *inode, - const char *name, int name_len, int flags) + const char *name, int name_len) { const int prefix_len = sizeof(XATTR_USER_PREFIX)-1; - if (!(flags & XATTR_KERNEL_CONTEXT) && - !test_opt(inode->i_sb, XATTR_USER)) + if (!test_opt(inode->i_sb, XATTR_USER)) return 0; if (list) { @@ -37,23 +36,22 @@ static int ext2_xattr_user_get(struct inode *inode, const char *name, - void *buffer, size_t size, int flags) + void *buffer, size_t size) { + int error; + if (strcmp(name, "") == 0) return -EINVAL; - if (!(flags & XATTR_KERNEL_CONTEXT)) { - int error; - - if (!test_opt(inode->i_sb, XATTR_USER)) - return -EOPNOTSUPP; + if (!test_opt(inode->i_sb, XATTR_USER)) + return -EOPNOTSUPP; #ifdef CONFIG_EXT2_FS_POSIX_ACL - error = ext2_permission_locked(inode, MAY_READ); + error = ext2_permission_locked(inode, MAY_READ); #else - error = permission(inode, MAY_READ); + error = permission(inode, MAY_READ); #endif - if (error) - return error; - } + if (error) + return error; + return ext2_xattr_get(inode, EXT2_XATTR_INDEX_USER, name, buffer, size); } @@ -62,24 +60,23 @@ ext2_xattr_user_set(struct inode *inode, const char *name, const void *value, size_t size, int flags) { + int error; + if (strcmp(name, "") == 0) return -EINVAL; + if (!test_opt(inode->i_sb, XATTR_USER)) + return -EOPNOTSUPP; if ( !S_ISREG(inode->i_mode) && (!S_ISDIR(inode->i_mode) || inode->i_mode & S_ISVTX)) return -EPERM; - if (!(flags & XATTR_KERNEL_CONTEXT)) { - int error; - - if (!test_opt(inode->i_sb, XATTR_USER)) - return -EOPNOTSUPP; #ifdef CONFIG_EXT2_FS_POSIX_ACL - error = ext2_permission_locked(inode, MAY_WRITE); + error = ext2_permission_locked(inode, MAY_WRITE); #else - error = permission(inode, MAY_WRITE); + error = permission(inode, MAY_WRITE); #endif - if (error) - return error; - } + if (error) + return error; + return ext2_xattr_set(inode, EXT2_XATTR_INDEX_USER, name, value, size, flags); } ===== fs/ext3/acl.c 1.5 vs edited ===== --- 1.5/fs/ext3/acl.c Sat Feb 15 03:24:02 2003 +++ edited/fs/ext3/acl.c Thu Feb 20 19:27:15 2003 @@ -431,7 +431,7 @@ */ static size_t ext3_xattr_list_acl_access(char *list, struct inode *inode, - const char *name, int name_len, int flags) + const char *name, int name_len) { const size_t size = sizeof(XATTR_NAME_ACL_ACCESS); @@ -444,7 +444,7 @@ static size_t ext3_xattr_list_acl_default(char *list, struct inode *inode, - const char *name, int name_len, int flags) + const char *name, int name_len) { const size_t size = sizeof(XATTR_NAME_ACL_DEFAULT); @@ -477,7 +477,7 @@ static int ext3_xattr_get_acl_access(struct inode *inode, const char *name, - void *buffer, size_t size, int flags) + void *buffer, size_t size) { if (strcmp(name, "") != 0) return -EINVAL; @@ -486,7 +486,7 @@ static int ext3_xattr_get_acl_default(struct inode *inode, const char *name, - void *buffer, size_t size, int flags) + void *buffer, size_t size) { if (strcmp(name, "") != 0) return -EINVAL; @@ -494,8 +494,7 @@ } static int -ext3_xattr_set_acl(struct inode *inode, int type, const void *value, - size_t size) +ext3_xattr_set_acl(struct inode *inode, int type, const void *value, size_t size) { handle_t *handle; struct posix_acl *acl; ===== fs/ext3/xattr.c 1.9 vs edited ===== --- 1.9/fs/ext3/xattr.c Sat Feb 15 03:24:04 2003 +++ edited/fs/ext3/xattr.c Thu Feb 20 19:27:15 2003 @@ -195,7 +195,7 @@ */ ssize_t ext3_getxattr(struct dentry *dentry, const char *name, - void *buffer, size_t size, int flags) + void *buffer, size_t size) { struct ext3_xattr_handler *handler; struct inode *inode = dentry->d_inode; @@ -203,7 +203,7 @@ handler = ext3_xattr_resolve_name(&name); if (!handler) return -EOPNOTSUPP; - return handler->get(inode, name, buffer, size, flags); + return handler->get(inode, name, buffer, size); } /* @@ -212,9 +212,9 @@ * dentry->d_inode->i_sem down */ ssize_t -ext3_listxattr(struct dentry *dentry, char *buffer, size_t size, int flags) +ext3_listxattr(struct dentry *dentry, char *buffer, size_t size) { - return ext3_xattr_list(dentry->d_inode, buffer, size, flags); + return ext3_xattr_list(dentry->d_inode, buffer, size); } /* @@ -243,7 +243,7 @@ * dentry->d_inode->i_sem down */ int -ext3_removexattr(struct dentry *dentry, const char *name, int flags) +ext3_removexattr(struct dentry *dentry, const char *name) { struct ext3_xattr_handler *handler; struct inode *inode = dentry->d_inode; @@ -251,7 +251,7 @@ handler = ext3_xattr_resolve_name(&name); if (!handler) return -EOPNOTSUPP; - return handler->set(inode, name, NULL, 0, flags | XATTR_REPLACE); + return handler->set(inode, name, NULL, 0, XATTR_REPLACE); } /* @@ -364,8 +364,7 @@ * used / required on success. */ int -ext3_xattr_list(struct inode *inode, char *buffer, size_t buffer_size, - int flags) +ext3_xattr_list(struct inode *inode, char *buffer, size_t buffer_size) { struct buffer_head *bh = NULL; struct ext3_xattr_entry *entry; @@ -405,7 +404,7 @@ handler = ext3_xattr_handler(entry->e_name_index); if (handler) size += handler->list(NULL, inode, entry->e_name, - entry->e_name_len, flags); + entry->e_name_len); } if (ext3_xattr_cache_insert(bh)) @@ -428,7 +427,7 @@ handler = ext3_xattr_handler(entry->e_name_index); if (handler) buf += handler->list(buf, inode, entry->e_name, - entry->e_name_len, flags); + entry->e_name_len); } error = size; ===== fs/ext3/xattr.h 1.5 vs edited ===== --- 1.5/fs/ext3/xattr.h Sat Feb 15 03:24:04 2003 +++ edited/fs/ext3/xattr.h Thu Feb 20 19:27:15 2003 @@ -57,9 +57,9 @@ struct ext3_xattr_handler { char *prefix; size_t (*list)(char *list, struct inode *inode, const char *name, - int name_len, int flags); + int name_len); int (*get)(struct inode *inode, const char *name, void *buffer, - size_t size, int flags); + size_t size); int (*set)(struct inode *inode, const char *name, const void *buffer, size_t size, int flags); }; @@ -68,12 +68,12 @@ extern void ext3_xattr_unregister(int, struct ext3_xattr_handler *); extern int ext3_setxattr(struct dentry *, const char *, const void *, size_t, int); -extern ssize_t ext3_getxattr(struct dentry *, const char *, void *, size_t, int); -extern ssize_t ext3_listxattr(struct dentry *, char *, size_t, int); -extern int ext3_removexattr(struct dentry *, const char *, int); +extern ssize_t ext3_getxattr(struct dentry *, const char *, void *, size_t); +extern ssize_t ext3_listxattr(struct dentry *, char *, size_t); +extern int ext3_removexattr(struct dentry *, const char *); extern int ext3_xattr_get(struct inode *, int, const char *, void *, size_t); -extern int ext3_xattr_list(struct inode *, char *, size_t, int flags); +extern int ext3_xattr_list(struct inode *, char *, size_t); extern int ext3_xattr_set(struct inode *, int, const char *, const void *, size_t, int); extern int ext3_xattr_set_handle(handle_t *, struct inode *, int, const char *, const void *, size_t, int); ===== fs/ext3/xattr_trusted.c 1.1 vs edited ===== --- 1.1/fs/ext3/xattr_trusted.c Sat Feb 15 03:24:04 2003 +++ edited/fs/ext3/xattr_trusted.c Thu Feb 20 19:30:51 2003 @@ -21,7 +21,7 @@ { const int prefix_len = sizeof(XATTR_TRUSTED_PREFIX)-1; - if (!((flags & XATTR_KERNEL_CONTEXT) || capable(CAP_SYS_ADMIN))) + if (!capable(CAP_SYS_ADMIN)) return 0; if (list) { @@ -38,7 +38,7 @@ { if (strcmp(name, "") == 0) return -EINVAL; - if (!((flags & XATTR_KERNEL_CONTEXT) || capable(CAP_SYS_ADMIN))) + if (!capable(CAP_SYS_ADMIN)) return -EPERM; return ext3_xattr_get(inode, EXT3_XATTR_INDEX_TRUSTED, name, buffer, size); @@ -50,7 +50,7 @@ { if (strcmp(name, "") == 0) return -EINVAL; - if (!((flags & XATTR_KERNEL_CONTEXT) || capable(CAP_SYS_ADMIN))) + if (!capable(CAP_SYS_ADMIN)) return -EPERM; return ext3_xattr_set(inode, EXT3_XATTR_INDEX_TRUSTED, name, value, size, flags); ===== fs/ext3/xattr_user.c 1.6 vs edited ===== --- 1.6/fs/ext3/xattr_user.c Sat Feb 15 03:24:03 2003 +++ edited/fs/ext3/xattr_user.c Thu Feb 20 19:27:15 2003 @@ -21,12 +21,11 @@ static size_t ext3_xattr_user_list(char *list, struct inode *inode, - const char *name, int name_len, int flags) + const char *name, int name_len) { const int prefix_len = sizeof(XATTR_USER_PREFIX)-1; - if (!(flags & XATTR_KERNEL_CONTEXT) && - !test_opt(inode->i_sb, XATTR_USER)) + if (!test_opt(inode->i_sb, XATTR_USER)) return 0; if (list) { @@ -39,23 +38,22 @@ static int ext3_xattr_user_get(struct inode *inode, const char *name, - void *buffer, size_t size, int flags) + void *buffer, size_t size) { + int error; + if (strcmp(name, "") == 0) return -EINVAL; - if (!(flags & XATTR_KERNEL_CONTEXT)) { - int error; - - if (!test_opt(inode->i_sb, XATTR_USER)) - return -EOPNOTSUPP; + if (!test_opt(inode->i_sb, XATTR_USER)) + return -EOPNOTSUPP; #ifdef CONFIG_EXT3_FS_POSIX_ACL - error = ext3_permission_locked(inode, MAY_READ); + error = ext3_permission_locked(inode, MAY_READ); #else - error = permission(inode, MAY_READ); + error = permission(inode, MAY_READ); #endif - if (error) - return error; - } + if (error) + return error; + return ext3_xattr_get(inode, EXT3_XATTR_INDEX_USER, name, buffer, size); } @@ -64,26 +62,26 @@ ext3_xattr_user_set(struct inode *inode, const char *name, const void *value, size_t size, int flags) { + int error; + if (strcmp(name, "") == 0) return -EINVAL; + if (!test_opt(inode->i_sb, XATTR_USER)) + return -EOPNOTSUPP; if ( !S_ISREG(inode->i_mode) && (!S_ISDIR(inode->i_mode) || inode->i_mode & S_ISVTX)) return -EPERM; - if (!(flags & XATTR_KERNEL_CONTEXT)) { - int error; - - if (!test_opt(inode->i_sb, XATTR_USER)) - return -EOPNOTSUPP; #ifdef CONFIG_EXT3_FS_POSIX_ACL - error = ext3_permission_locked(inode, MAY_WRITE); + error = ext3_permission_locked(inode, MAY_WRITE); #else - error = permission(inode, MAY_WRITE); + error = permission(inode, MAY_WRITE); #endif - if (error) - return error; - } + if (error) + return error; + return ext3_xattr_set(inode, EXT3_XATTR_INDEX_USER, name, value, size, flags); + } struct ext3_xattr_handler ext3_xattr_user_handler = { ===== fs/jfs/jfs_xattr.h 1.4 vs edited ===== --- 1.4/fs/jfs/jfs_xattr.h Sat Feb 15 03:24:02 2003 +++ edited/fs/jfs/jfs_xattr.h Thu Feb 20 19:27:15 2003 @@ -57,8 +57,8 @@ extern int jfs_setxattr(struct dentry *, const char *, const void *, size_t, int); extern ssize_t __jfs_getxattr(struct inode *, const char *, void *, size_t); -extern ssize_t jfs_getxattr(struct dentry *, const char *, void *, size_t, int); -extern ssize_t jfs_listxattr(struct dentry *, char *, size_t, int); -extern int jfs_removexattr(struct dentry *, const char *, int); +extern ssize_t jfs_getxattr(struct dentry *, const char *, void *, size_t); +extern ssize_t jfs_listxattr(struct dentry *, char *, size_t); +extern int jfs_removexattr(struct dentry *, const char *); #endif /* H_JFS_XATTR */ ===== fs/jfs/xattr.c 1.11 vs edited ===== --- 1.11/fs/jfs/xattr.c Sat Feb 15 03:24:02 2003 +++ edited/fs/jfs/xattr.c Thu Feb 20 19:27:15 2003 @@ -962,13 +962,12 @@ } ssize_t jfs_getxattr(struct dentry *dentry, const char *name, void *data, - size_t buf_size, int flags) + size_t buf_size) { return __jfs_getxattr(dentry->d_inode, name, data, buf_size); } -ssize_t jfs_listxattr(struct dentry * dentry, char *data, size_t buf_size, - int flags) +ssize_t jfs_listxattr(struct dentry * dentry, char *data, size_t buf_size) { struct inode *inode = dentry->d_inode; char *buffer; @@ -1014,7 +1013,7 @@ return size; } -int jfs_removexattr(struct dentry *dentry, const char *name, int flags) +int jfs_removexattr(struct dentry *dentry, const char *name) { return __jfs_setxattr(dentry->d_inode, name, 0, 0, XATTR_REPLACE); } ===== fs/xfs/linux/xfs_iops.c 1.15 vs edited ===== --- 1.15/fs/xfs/linux/xfs_iops.c Sat Feb 15 03:24:02 2003 +++ edited/fs/xfs/linux/xfs_iops.c Thu Feb 20 19:27:15 2003 @@ -640,8 +640,7 @@ struct dentry *dentry, const char *name, void *data, - size_t size, - int flags) + size_t size) { ssize_t error; int xflags = 0; @@ -698,8 +697,7 @@ linvfs_listxattr( struct dentry *dentry, char *data, - size_t size, - int flags) + size_t size) { ssize_t error; int result = 0; @@ -743,8 +741,7 @@ STATIC int linvfs_removexattr( struct dentry *dentry, - const char *name, - int flags) + const char *name) { int error; int xflags = 0; ===== include/linux/fs.h 1.219 vs edited ===== --- 1.219/include/linux/fs.h Sat Feb 15 03:24:02 2003 +++ edited/include/linux/fs.h Thu Feb 20 19:27:15 2003 @@ -743,9 +743,9 @@ int (*setattr) (struct dentry *, struct iattr *); int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); - ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t,int); - ssize_t (*listxattr) (struct dentry *, char *, size_t, int); - int (*removexattr) (struct dentry *, const char *, int); + ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t); + ssize_t (*listxattr) (struct dentry *, char *, size_t); + int (*removexattr) (struct dentry *, const char *); }; struct seq_file; ===== include/linux/i2c-proc.h 1.4 vs edited ===== --- 1.4/include/linux/i2c-proc.h Tue Feb 4 21:58:09 2003 +++ edited/include/linux/i2c-proc.h Thu Feb 20 19:59:01 2003 @@ -69,8 +69,7 @@ these functions must be updated! */ extern int i2c_register_entry(struct i2c_client *client, const char *prefix, - ctl_table * ctl_template, - struct module *controlling_mod); + ctl_table * ctl_template); extern void i2c_deregister_entry(int id); ===== include/linux/xattr.h 1.3 vs edited ===== --- 1.3/include/linux/xattr.h Sat Feb 15 03:24:03 2003 +++ edited/include/linux/xattr.h Thu Feb 20 19:27:03 2003 @@ -9,8 +9,7 @@ #ifndef _LINUX_XATTR_H #define _LINUX_XATTR_H -#define XATTR_CREATE 0x1 /* fail if attr already exists */ -#define XATTR_REPLACE 0x2 /* fail if attr does not exist */ -#define XATTR_KERNEL_CONTEXT 0x4 /* called from kernel context */ +#define XATTR_CREATE 0x1 /* set value, fail if attr already exists */ +#define XATTR_REPLACE 0x2 /* set value, fail if attr does not exist */ #endif /* _LINUX_XATTR_H */