| Summary: | cifs: CIFSSMBQAllEAs parses xattr data wrongly | |||
|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 6 | Reporter: | Jian Li <jiali> | |
| Component: | kernel | Assignee: | Jeff Layton <jlayton> | |
| Status: | CLOSED ERRATA | QA Contact: | Jian Li <jiali> | |
| Severity: | medium | Docs Contact: | ||
| Priority: | medium | |||
| Version: | 6.2 | CC: | dhowells, jlayton, nmurray, rwheeler, sprabhu, steved | |
| Target Milestone: | rc | |||
| Target Release: | --- | |||
| Hardware: | Unspecified | |||
| OS: | Unspecified | |||
| Whiteboard: | ||||
| Fixed In Version: | kernel-2.6.32-183.el6 | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | ||
| Clone Of: | ||||
| : | 846522 (view as bug list) | Environment: | ||
| Last Closed: | 2011-12-06 13:54:05 UTC | Type: | --- | |
| Regression: | --- | Mount Type: | --- | |
| Documentation: | --- | CRM: | ||
| Verified Versions: | Category: | --- | ||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | ||
| Cloudforms Team: | --- | Target Upstream Version: | ||
| Bug Depends On: | ||||
| Bug Blocks: | 846522 | |||
(In reply to comment #0) > Description of problem: > When I fetch two(or more) extra attr data from CIFS files using getfattr, I Execute, mistake extended attribute with extra attribute This request was evaluated by Red Hat Product Management for inclusion in a Red Hat Enterprise Linux maintenance release. Product Management has requested further review of this request by Red Hat Engineering, for potential inclusion in a Red Hat Enterprise Linux Update release for currently deployed products. This request is not yet committed for inclusion in an Update release. Nice catch. Doesn't look too tough to fix -- just need to make sure we match the length of names before the strncmp. I sent a patch upstream to fix this. If it gets pushed for 3.1 in the near future, I'll plan to put this in RHEL6.2. http://article.gmane.org/gmane.linux.kernel.cifs/3808 Looks like this patch causes a compiler warning to pop with certain gcc versions (including RHEL6's). I'll respin and re-post. Patch(es) available on kernel-2.6.32-183.el6 This bug is tested with case /kernel/filesystems/cifs/xattr
======reproduce
[root@ibm-hs21-01 xattr]# make run
**snip**
< user.test0="test"
**snip**
---
> user.test0="test0"
**snip**
/kernel/filesystems/cifs/xattr result: FAIL
**snip**
[root@ibm-hs21-01 xattr]# uname -a
Linux ibm-hs21-01.rhts.eng.nay.redhat.com 2.6.32-178.el6.x86_64 #1 SMP Wed Aug 3 10:43:13 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
======verify
[root@ibm-hs21-01 xattr]# uname -a
Linux ibm-hs21-01.rhts.eng.nay.redhat.com 2.6.32-188.el6.x86_64 #1 SMP Fri Aug 12 10:22:27 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
[root@ibm-hs21-01 xattr]# pwd
/mnt/tests/kernel/filesystems/cifs/xattr
[root@ibm-hs21-01 xattr]# make run
**snip**
/kernel/filesystems/cifs/xattr result: SUCCESS
**snip**
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. http://rhn.redhat.com/errata/RHSA-2011-1530.html |
Description of problem: When I fetch two(or more) extra attr data from CIFS files using getfattr, I get wrong data. I scan source code(2.6.32-170), find CIFSSMBQAllEAs parse wrongly the data which is returned by SMB messages. Test steps: [root@amd-pike-02 ~]# setfattr -n user.test -v test /mnt/test/test [root@amd-pike-02 ~]# setfattr -n user.test1 -v test1 /mnt/test/test [root@amd-pike-02 ~]# setfattr -n user.1test -v 1test /mnt/test/test [root@amd-pike-02 ~]# getfattr -d /mnt/test/test getfattr: Removing leading '/' from absolute path names # file: mnt/test/test user.1test="1test" user.security.selinux="unconfined_u:object_r:default_t:s0 user.test="test" user.test1="test" <----- should be "test1" [root@amd-pike-02 ~]# getfattr -n user.test1 /mnt/test/test getfattr: Removing leading '/' from absolute path names # file: mnt/test/test user.test1="test" <------ should be "test1" Analysis: [fs/cifs/cifssmb.c] [5815] name_len = temp_fea->name_len; <snip> [5825] if (ea_name) { if (strncmp(ea_name, temp_ptr, name_len) == 0) { ----ea_name="test1" temp_ptr="test" name_len=4 ----if (ea_name && strnlen(ea_name,0x1000) == name_len)) .....