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
nexedi
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
Hide 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 @@
...
@@ -31,7 +31,7 @@
#ifdef CONFIG_CIFS_EXPERIMENTAL
#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
,
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
,
1
},
{
0
,
0
,
0
,
0
,
0
}
},
"nobody"
},
{{
1
,
1
,
{
0
,
0
,
0
,
0
,
0
,
5
},
{
11
,
0
,
0
,
0
,
0
}
},
"net-users"
},
{{
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)
...
@@ -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 */
/* BB need to add parm so we can store the SID BB */
/* validate that we do not go past end of acl */
/* 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"
));
cERROR
(
1
,
(
"ACL too small to parse DACL"
));
return
;
return
;
}
}
#ifdef CONFIG_CIFS_DEBUG2
#ifdef CONFIG_CIFS_DEBUG2
cFYI
(
1
,
(
"DACL revision %d size %d num aces %d"
,
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
#endif
acl_base
=
(
char
*
)
pdacl
;
acl_base
=
(
char
*
)
pdacl
;
...
@@ -255,7 +256,6 @@ static void parse_dacl(struct cifs_acl *pdacl, char *end_of_acl)
...
@@ -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
)
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 */
/* 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)
...
@@ -265,14 +265,13 @@ static int parse_sid(struct cifs_sid *psid, char *end_of_acl)
return
-
EINVAL
;
return
-
EINVAL
;
}
}
num_subauth
=
cpu_to_le32
(
psid
->
num_subauth
);
if
(
psid
->
num_subauth
)
{
if
(
num_subauth
)
{
#ifdef CONFIG_CIFS_DEBUG2
#ifdef CONFIG_CIFS_DEBUG2
int
i
;
int
i
;
cFYI
(
1
,
(
"SID revision %d num_auth %d First subauth 0x%x"
,
cFYI
(
1
,
(
"SID revision %d num_auth %d First subauth 0x%x"
,
psid
->
revision
,
psid
->
num_subauth
,
psid
->
sub_auth
[
0
]));
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
,
cFYI
(
1
,
(
"SID sub_auth[%d]: 0x%x "
,
i
,
le32_to_cpu
(
psid
->
sub_auth
[
i
])));
le32_to_cpu
(
psid
->
sub_auth
[
i
])));
}
}
...
@@ -280,7 +279,7 @@ static int parse_sid(struct cifs_sid *psid, char *end_of_acl)
...
@@ -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
/* BB add length check to make sure that we do not have huge
num auths and therefore go off the end */
num auths and therefore go off the end */
cFYI
(
1
,
(
"RID 0x%x"
,
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
#endif
}
}
...
@@ -297,17 +296,18 @@ int parse_sec_desc(struct cifs_ntsd *pntsd, int acl_len)
...
@@ -297,17 +296,18 @@ int parse_sec_desc(struct cifs_ntsd *pntsd, int acl_len)
char
*
end_of_acl
=
((
char
*
)
pntsd
)
+
acl_len
;
char
*
end_of_acl
=
((
char
*
)
pntsd
)
+
acl_len
;
owner_sid_ptr
=
(
struct
cifs_sid
*
)((
char
*
)
pntsd
+
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
+
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
+
dacl_ptr
=
(
struct
cifs_acl
*
)((
char
*
)
pntsd
+
cpu_to_le32
(
pntsd
->
dacloffset
));
le32_to_cpu
(
pntsd
->
dacloffset
));
#ifdef CONFIG_CIFS_DEBUG2
#ifdef CONFIG_CIFS_DEBUG2
cFYI
(
1
,
(
"revision %d type 0x%x ooffset 0x%x goffset 0x%x "
cFYI
(
1
,
(
"revision %d type 0x%x ooffset 0x%x goffset 0x%x "
"sacloffset 0x%x dacloffset 0x%x"
,
"sacloffset 0x%x dacloffset 0x%x"
,
pntsd
->
revision
,
pntsd
->
type
,
pntsd
->
revision
,
pntsd
->
type
,
le32_to_cpu
(
pntsd
->
osidoffset
),
pntsd
->
osidoffset
,
pntsd
->
gsidoffset
,
pntsd
->
sacloffset
,
le32_to_cpu
(
pntsd
->
gsidoffset
),
pntsd
->
dacloffset
));
le32_to_cpu
(
pntsd
->
sacloffset
),
le32_to_cpu
(
pntsd
->
dacloffset
));
#endif
#endif
rc
=
parse_sid
(
owner_sid_ptr
,
end_of_acl
);
rc
=
parse_sid
(
owner_sid_ptr
,
end_of_acl
);
if
(
rc
)
if
(
rc
)
...
...
fs/cifs/cifsacl.h
View file @
af6f4612
...
@@ -27,25 +27,25 @@
...
@@ -27,25 +27,25 @@
#define SIDNAMELENGTH 20
/* long enough for the ones we care about */
#define SIDNAMELENGTH 20
/* long enough for the ones we care about */
struct
cifs_ntsd
{
struct
cifs_ntsd
{
__
u
16
revision
;
/* revision level */
__
le
16
revision
;
/* revision level */
__
u
16
type
;
__
le
16
type
;
__
u
32
osidoffset
;
__
le
32
osidoffset
;
__
u
32
gsidoffset
;
__
le
32
gsidoffset
;
__
u
32
sacloffset
;
__
le
32
sacloffset
;
__
u
32
dacloffset
;
__
le
32
dacloffset
;
}
__attribute__
((
packed
));
}
__attribute__
((
packed
));
struct
cifs_sid
{
struct
cifs_sid
{
__u8
revision
;
/* revision level */
__u8
revision
;
/* revision level */
__u8
num_subauth
;
__u8
num_subauth
;
__u8
authority
[
6
];
__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
));
}
__attribute__
((
packed
));
struct
cifs_acl
{
struct
cifs_acl
{
__
u
16
revision
;
/* revision level */
__
le
16
revision
;
/* revision level */
__
u
16
size
;
__
le
16
size
;
__
u
32
num_aces
;
__
le
32
num_aces
;
}
__attribute__
((
packed
));
}
__attribute__
((
packed
));
struct
cifs_ntace
{
/* first part of ACE which contains perms */
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 */
...
@@ -59,7 +59,7 @@ struct cifs_ace { /* last part of ACE which includes user info */
__u8
revision
;
/* revision level */
__u8
revision
;
/* revision level */
__u8
num_subauth
;
__u8
num_subauth
;
__u8
authority
[
6
];
__u8
authority
[
6
];
__
u
32
sub_auth
[
5
];
__
le
32
sub_auth
[
5
];
}
__attribute__
((
packed
));
}
__attribute__
((
packed
));
struct
cifs_wksid
{
struct
cifs_wksid
{
...
@@ -69,7 +69,6 @@ struct cifs_wksid {
...
@@ -69,7 +69,6 @@ struct cifs_wksid {
#ifdef CONFIG_CIFS_EXPERIMENTAL
#ifdef CONFIG_CIFS_EXPERIMENTAL
extern
struct
cifs_wksid
wksidarr
[
NUM_WK_SIDS
];
extern
int
match_sid
(
struct
cifs_sid
*
);
extern
int
match_sid
(
struct
cifs_sid
*
);
extern
int
compare_sids
(
struct
cifs_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,
...
@@ -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 */
/* 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) */
/* BB check if (acl_len > bufsize) */
parse_sec_desc
(
psec_desc
,
acl_len
);
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