Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
af6f4612
Commit
af6f4612
authored
Oct 16, 2007
by
Steve French
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[CIFS] Fix some endianness problems in new acl code
Signed-off-by:
Steve French
<
sfrench@us.ibm.com
>
parent
016ec75f
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
26 additions
and
27 deletions
+26
-27
fs/cifs/cifsacl.c
fs/cifs/cifsacl.c
+14
-14
fs/cifs/cifsacl.h
fs/cifs/cifsacl.h
+11
-12
fs/cifs/cifssmb.c
fs/cifs/cifssmb.c
+1
-1
No files found.
fs/cifs/cifsacl.c
View file @
af6f4612
...
...
@@ -31,7 +31,7 @@
#ifdef CONFIG_CIFS_EXPERIMENTAL
struct
cifs_wksid
wksidarr
[
NUM_WK_SIDS
]
=
{
st
atic
st
ruct
cifs_wksid
wksidarr
[
NUM_WK_SIDS
]
=
{
{{
1
,
0
,
{
0
,
0
,
0
,
0
,
0
,
0
},
{
0
,
0
,
0
,
0
,
0
}
},
"null user"
},
{{
1
,
1
,
{
0
,
0
,
0
,
0
,
0
,
1
},
{
0
,
0
,
0
,
0
,
0
}
},
"nobody"
},
{{
1
,
1
,
{
0
,
0
,
0
,
0
,
0
,
5
},
{
11
,
0
,
0
,
0
,
0
}
},
"net-users"
},
...
...
@@ -192,14 +192,15 @@ static void parse_dacl(struct cifs_acl *pdacl, char *end_of_acl)
/* BB need to add parm so we can store the SID BB */
/* validate that we do not go past end of acl */
if
(
end_of_acl
<
(
char
*
)
pdacl
+
pdacl
->
size
)
{
if
(
end_of_acl
<
(
char
*
)
pdacl
+
le16_to_cpu
(
pdacl
->
size
)
)
{
cERROR
(
1
,
(
"ACL too small to parse DACL"
));
return
;
}
#ifdef CONFIG_CIFS_DEBUG2
cFYI
(
1
,
(
"DACL revision %d size %d num aces %d"
,
pdacl
->
revision
,
pdacl
->
size
,
pdacl
->
num_aces
));
le16_to_cpu
(
pdacl
->
revision
),
le16_to_cpu
(
pdacl
->
size
),
le32_to_cpu
(
pdacl
->
num_aces
)));
#endif
acl_base
=
(
char
*
)
pdacl
;
...
...
@@ -255,7 +256,6 @@ static void parse_dacl(struct cifs_acl *pdacl, char *end_of_acl)
static
int
parse_sid
(
struct
cifs_sid
*
psid
,
char
*
end_of_acl
)
{
int
num_subauth
;
/* BB need to add parm so we can store the SID BB */
...
...
@@ -265,14 +265,13 @@ static int parse_sid(struct cifs_sid *psid, char *end_of_acl)
return
-
EINVAL
;
}
num_subauth
=
cpu_to_le32
(
psid
->
num_subauth
);
if
(
num_subauth
)
{
if
(
psid
->
num_subauth
)
{
#ifdef CONFIG_CIFS_DEBUG2
int
i
;
cFYI
(
1
,
(
"SID revision %d num_auth %d First subauth 0x%x"
,
psid
->
revision
,
psid
->
num_subauth
,
psid
->
sub_auth
[
0
]));
for
(
i
=
0
;
i
<
num_subauth
;
++
i
)
{
for
(
i
=
0
;
i
<
psid
->
num_subauth
;
i
++
)
{
cFYI
(
1
,
(
"SID sub_auth[%d]: 0x%x "
,
i
,
le32_to_cpu
(
psid
->
sub_auth
[
i
])));
}
...
...
@@ -280,7 +279,7 @@ static int parse_sid(struct cifs_sid *psid, char *end_of_acl)
/* BB add length check to make sure that we do not have huge
num auths and therefore go off the end */
cFYI
(
1
,
(
"RID 0x%x"
,
le32_to_cpu
(
psid
->
sub_auth
[
num_subauth
-
1
])));
le32_to_cpu
(
psid
->
sub_auth
[
psid
->
num_subauth
-
1
])));
#endif
}
...
...
@@ -297,17 +296,18 @@ int parse_sec_desc(struct cifs_ntsd *pntsd, int acl_len)
char
*
end_of_acl
=
((
char
*
)
pntsd
)
+
acl_len
;
owner_sid_ptr
=
(
struct
cifs_sid
*
)((
char
*
)
pntsd
+
cpu_to_le32
(
pntsd
->
osidoffset
));
le32_to_cpu
(
pntsd
->
osidoffset
));
group_sid_ptr
=
(
struct
cifs_sid
*
)((
char
*
)
pntsd
+
cpu_to_le32
(
pntsd
->
gsidoffset
));
le32_to_cpu
(
pntsd
->
gsidoffset
));
dacl_ptr
=
(
struct
cifs_acl
*
)((
char
*
)
pntsd
+
cpu_to_le32
(
pntsd
->
dacloffset
));
le32_to_cpu
(
pntsd
->
dacloffset
));
#ifdef CONFIG_CIFS_DEBUG2
cFYI
(
1
,
(
"revision %d type 0x%x ooffset 0x%x goffset 0x%x "
"sacloffset 0x%x dacloffset 0x%x"
,
pntsd
->
revision
,
pntsd
->
type
,
pntsd
->
osidoffset
,
pntsd
->
gsidoffset
,
pntsd
->
sacloffset
,
pntsd
->
dacloffset
));
pntsd
->
revision
,
pntsd
->
type
,
le32_to_cpu
(
pntsd
->
osidoffset
),
le32_to_cpu
(
pntsd
->
gsidoffset
),
le32_to_cpu
(
pntsd
->
sacloffset
),
le32_to_cpu
(
pntsd
->
dacloffset
));
#endif
rc
=
parse_sid
(
owner_sid_ptr
,
end_of_acl
);
if
(
rc
)
...
...
fs/cifs/cifsacl.h
View file @
af6f4612
...
...
@@ -27,25 +27,25 @@
#define SIDNAMELENGTH 20
/* long enough for the ones we care about */
struct
cifs_ntsd
{
__
u
16
revision
;
/* revision level */
__
u
16
type
;
__
u
32
osidoffset
;
__
u
32
gsidoffset
;
__
u
32
sacloffset
;
__
u
32
dacloffset
;
__
le
16
revision
;
/* revision level */
__
le
16
type
;
__
le
32
osidoffset
;
__
le
32
gsidoffset
;
__
le
32
sacloffset
;
__
le
32
dacloffset
;
}
__attribute__
((
packed
));
struct
cifs_sid
{
__u8
revision
;
/* revision level */
__u8
num_subauth
;
__u8
authority
[
6
];
__
u32
sub_auth
[
5
];
/* sub_auth[num_subauth]
*/
__
le32
sub_auth
[
5
];
/* sub_auth[num_subauth] */
/* BB FIXME endianness BB
*/
}
__attribute__
((
packed
));
struct
cifs_acl
{
__
u
16
revision
;
/* revision level */
__
u
16
size
;
__
u
32
num_aces
;
__
le
16
revision
;
/* revision level */
__
le
16
size
;
__
le
32
num_aces
;
}
__attribute__
((
packed
));
struct
cifs_ntace
{
/* first part of ACE which contains perms */
...
...
@@ -59,7 +59,7 @@ struct cifs_ace { /* last part of ACE which includes user info */
__u8
revision
;
/* revision level */
__u8
num_subauth
;
__u8
authority
[
6
];
__
u
32
sub_auth
[
5
];
__
le
32
sub_auth
[
5
];
}
__attribute__
((
packed
));
struct
cifs_wksid
{
...
...
@@ -69,7 +69,6 @@ struct cifs_wksid {
#ifdef CONFIG_CIFS_EXPERIMENTAL
extern
struct
cifs_wksid
wksidarr
[
NUM_WK_SIDS
];
extern
int
match_sid
(
struct
cifs_sid
*
);
extern
int
compare_sids
(
struct
cifs_sid
*
,
struct
cifs_sid
*
);
...
...
fs/cifs/cifssmb.c
View file @
af6f4612
...
...
@@ -3121,7 +3121,7 @@ CIFSSMBGetCIFSACL(const int xid, struct cifsTconInfo *tcon, __u16 fid,
/* BB check that data area is minimum length and as big as acl_len */
acl_len
=
le32_to_cpu
(
*
(
__le32
*
)
parm
);
acl_len
=
le32_to_cpu
(
*
parm
);
/* BB check if (acl_len > bufsize) */
parse_sec_desc
(
psec_desc
,
acl_len
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment