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
6f239284
Commit
6f239284
authored
May 04, 2011
by
James Morris
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-linus' of
git://git.infradead.org/users/eparis/selinux
into for-linus
parents
609cfda5
bf69d41d
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
26 additions
and
13 deletions
+26
-13
Documentation/flexible-arrays.txt
Documentation/flexible-arrays.txt
+2
-2
include/linux/flex_array.h
include/linux/flex_array.h
+1
-1
lib/flex_array.c
lib/flex_array.c
+18
-6
security/selinux/hooks.c
security/selinux/hooks.c
+2
-1
security/selinux/ss/policydb.c
security/selinux/ss/policydb.c
+3
-3
No files found.
Documentation/flexible-arrays.txt
View file @
6f239284
...
...
@@ -66,10 +66,10 @@ trick is to ensure that any needed memory allocations are done before
entering atomic context, using:
int flex_array_prealloc(struct flex_array *array, unsigned int start,
unsigned int
end
, gfp_t flags);
unsigned int
nr_elements
, gfp_t flags);
This function will ensure that memory for the elements indexed in the range
defined by start and
end
has been allocated. Thereafter, a
defined by start and
nr_elements
has been allocated. Thereafter, a
flex_array_put() call on an element in that range is guaranteed not to
block.
...
...
include/linux/flex_array.h
View file @
6f239284
...
...
@@ -61,7 +61,7 @@ struct flex_array {
struct
flex_array
*
flex_array_alloc
(
int
element_size
,
unsigned
int
total
,
gfp_t
flags
);
int
flex_array_prealloc
(
struct
flex_array
*
fa
,
unsigned
int
start
,
unsigned
int
end
,
gfp_t
flags
);
unsigned
int
nr_elements
,
gfp_t
flags
);
void
flex_array_free
(
struct
flex_array
*
fa
);
void
flex_array_free_parts
(
struct
flex_array
*
fa
);
int
flex_array_put
(
struct
flex_array
*
fa
,
unsigned
int
element_nr
,
void
*
src
,
...
...
lib/flex_array.c
View file @
6f239284
...
...
@@ -232,10 +232,10 @@ EXPORT_SYMBOL(flex_array_clear);
/**
* flex_array_prealloc - guarantee that array space exists
* @fa: the flex array for which to preallocate parts
* @start: index of first array element for which space is allocated
* @
end: index of last (inclusive) element
for which space is allocated
* @flags: page allocation flags
* @fa:
the flex array for which to preallocate parts
* @start:
index of first array element for which space is allocated
* @
nr_elements: number of elements
for which space is allocated
* @flags:
page allocation flags
*
* This will guarantee that no future calls to flex_array_put()
* will allocate memory. It can be used if you are expecting to
...
...
@@ -245,14 +245,24 @@ EXPORT_SYMBOL(flex_array_clear);
* Locking must be provided by the caller.
*/
int
flex_array_prealloc
(
struct
flex_array
*
fa
,
unsigned
int
start
,
unsigned
int
end
,
gfp_t
flags
)
unsigned
int
nr_elements
,
gfp_t
flags
)
{
int
start_part
;
int
end_part
;
int
part_nr
;
unsigned
int
end
;
struct
flex_array_part
*
part
;
if
(
start
>=
fa
->
total_nr_elements
||
end
>=
fa
->
total_nr_elements
)
if
(
!
start
&&
!
nr_elements
)
return
0
;
if
(
start
>=
fa
->
total_nr_elements
)
return
-
ENOSPC
;
if
(
!
nr_elements
)
return
0
;
end
=
start
+
nr_elements
-
1
;
if
(
end
>=
fa
->
total_nr_elements
)
return
-
ENOSPC
;
if
(
elements_fit_in_base
(
fa
))
return
0
;
...
...
@@ -343,6 +353,8 @@ int flex_array_shrink(struct flex_array *fa)
int
part_nr
;
int
ret
=
0
;
if
(
!
fa
->
total_nr_elements
)
return
0
;
if
(
elements_fit_in_base
(
fa
))
return
ret
;
for
(
part_nr
=
0
;
part_nr
<
FLEX_ARRAY_NR_BASE_PTRS
;
part_nr
++
)
{
...
...
security/selinux/hooks.c
View file @
6f239284
...
...
@@ -1578,7 +1578,8 @@ static int may_create(struct inode *dir,
return
rc
;
if
(
!
newsid
||
!
(
sbsec
->
flags
&
SE_SBLABELSUPP
))
{
rc
=
security_transition_sid
(
sid
,
dsec
->
sid
,
tclass
,
NULL
,
&
newsid
);
rc
=
security_transition_sid
(
sid
,
dsec
->
sid
,
tclass
,
&
dentry
->
d_name
,
&
newsid
);
if
(
rc
)
return
rc
;
}
...
...
security/selinux/ss/policydb.c
View file @
6f239284
...
...
@@ -502,7 +502,7 @@ static int policydb_index(struct policydb *p)
goto
out
;
rc
=
flex_array_prealloc
(
p
->
type_val_to_struct_array
,
0
,
p
->
p_types
.
nprim
-
1
,
GFP_KERNEL
|
__GFP_ZERO
);
p
->
p_types
.
nprim
,
GFP_KERNEL
|
__GFP_ZERO
);
if
(
rc
)
goto
out
;
...
...
@@ -519,7 +519,7 @@ static int policydb_index(struct policydb *p)
goto
out
;
rc
=
flex_array_prealloc
(
p
->
sym_val_to_name
[
i
],
0
,
p
->
symtab
[
i
].
nprim
-
1
,
0
,
p
->
symtab
[
i
].
nprim
,
GFP_KERNEL
|
__GFP_ZERO
);
if
(
rc
)
goto
out
;
...
...
@@ -2375,7 +2375,7 @@ int policydb_read(struct policydb *p, void *fp)
goto
bad
;
/* preallocate so we don't have to worry about the put ever failing */
rc
=
flex_array_prealloc
(
p
->
type_attr_map_array
,
0
,
p
->
p_types
.
nprim
-
1
,
rc
=
flex_array_prealloc
(
p
->
type_attr_map_array
,
0
,
p
->
p_types
.
nprim
,
GFP_KERNEL
|
__GFP_ZERO
);
if
(
rc
)
goto
bad
;
...
...
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