Message ID | 551B6904.50405@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, 2015-03-31 at 23:41 -0400, Thomas Hebb wrote: > By the time we reach strcmp_xattr_finder_info(), hfsplus_osx_getxattr() > has already prefixed the user-provided xattr name with "osx.", so the > existing check for the special FinderInfo attribute will always fail, > and ENODATA will be returned to userspace. > > Since hfsplus_listxattr() reports the FinderInfo attribute, this > behavior causes certain userspace utilities (e.g. patch) to fail, since > the kernel lists an attribute that doesn't exist. > Could you describe in more details how do you use userspace utilities for extracting xattr? I suspect that you simply use it in incorrect way. Thanks, Vyacheslav Dubeyko. > Cc: stable@vger.kernel.org > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Hin-Tak Leung <htl10@users.sourceforge.net> > Cc: Sergei Antonov <saproj@gmail.com> > Cc: Anton Altaparmakov <anton@tuxera.com> > Cc: Fabian Frederick <fabf@skynet.be> > Cc: Christian Kujau <lists@nerdbynature.de> > Signed-off-by: Thomas Hebb <tommyhebb@gmail.com> > --- > fs/hfsplus/xattr.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/fs/hfsplus/xattr.c b/fs/hfsplus/xattr.c > index d98094a..da0664e 100644 > --- a/fs/hfsplus/xattr.c > +++ b/fs/hfsplus/xattr.c > @@ -28,8 +28,16 @@ const struct xattr_handler *hfsplus_xattr_handlers[] = { > static int strcmp_xattr_finder_info(const char *name) > { > + int err = 0; > + > if (name) { > - return strncmp(name, HFSPLUS_XATTR_FINDER_INFO_NAME, > + err = strncmp(name, XATTR_MAC_OSX_PREFIX, > + XATTR_MAC_OSX_PREFIX_LEN); > + if (err) > + return err; > + > + return strncmp(name + XATTR_MAC_OSX_PREFIX_LEN, > + HFSPLUS_XATTR_FINDER_INFO_NAME, > sizeof(HFSPLUS_XATTR_FINDER_INFO_NAME)); > } > return -1; -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/hfsplus/xattr.c b/fs/hfsplus/xattr.c index d98094a..da0664e 100644 --- a/fs/hfsplus/xattr.c +++ b/fs/hfsplus/xattr.c @@ -28,8 +28,16 @@ const struct xattr_handler *hfsplus_xattr_handlers[] = { static int strcmp_xattr_finder_info(const char *name) { + int err = 0; + if (name) { - return strncmp(name, HFSPLUS_XATTR_FINDER_INFO_NAME, + err = strncmp(name, XATTR_MAC_OSX_PREFIX, + XATTR_MAC_OSX_PREFIX_LEN); + if (err) + return err; + + return strncmp(name + XATTR_MAC_OSX_PREFIX_LEN, + HFSPLUS_XATTR_FINDER_INFO_NAME, sizeof(HFSPLUS_XATTR_FINDER_INFO_NAME)); } return -1; -- 2.3.4
By the time we reach strcmp_xattr_finder_info(), hfsplus_osx_getxattr() has already prefixed the user-provided xattr name with "osx.", so the existing check for the special FinderInfo attribute will always fail, and ENODATA will be returned to userspace. Since hfsplus_listxattr() reports the FinderInfo attribute, this behavior causes certain userspace utilities (e.g. patch) to fail, since the kernel lists an attribute that doesn't exist. Cc: stable@vger.kernel.org Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Hin-Tak Leung <htl10@users.sourceforge.net> Cc: Sergei Antonov <saproj@gmail.com> Cc: Anton Altaparmakov <anton@tuxera.com> Cc: Fabian Frederick <fabf@skynet.be> Cc: Christian Kujau <lists@nerdbynature.de> Signed-off-by: Thomas Hebb <tommyhebb@gmail.com> --- fs/hfsplus/xattr.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html