diff options
| author | John Johansen <john.johansen@canonical.com> | 2010-10-09 03:47:53 -0400 |
|---|---|---|
| committer | James Morris <jmorris@namei.org> | 2010-10-20 19:12:46 -0400 |
| commit | 3ed02ada2a5e695e2fbb5e4a0008cfcb0f50feaa (patch) | |
| tree | 8b01e83cfa6b18fe8b83b342733931d5f98bc1b2 /security | |
| parent | 9f1c1d426b0402b25cd0d7ca719ffc8e20e46d5f (diff) | |
AppArmor: Ensure the size of the copy is < the buffer allocated to hold it
Actually I think in this case the appropriate thing to do is to BUG as there
is currently a case (remove) where the alloc_size needs to be larger than
the copy_size, and if copy_size is ever greater than alloc_size there is
a mistake in the caller code.
Signed-off-by: John Johansen <john.johansen@canonical.com>
Acked-by: Kees Cook <kees.cook@canonical.com>
Signed-off-by: James Morris <jmorris@namei.org>
Diffstat (limited to 'security')
| -rw-r--r-- | security/apparmor/apparmorfs.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/security/apparmor/apparmorfs.c b/security/apparmor/apparmorfs.c index 7320331b44ab..544ff5837cb6 100644 --- a/security/apparmor/apparmorfs.c +++ b/security/apparmor/apparmorfs.c | |||
| @@ -29,7 +29,7 @@ | |||
| 29 | * aa_simple_write_to_buffer - common routine for getting policy from user | 29 | * aa_simple_write_to_buffer - common routine for getting policy from user |
| 30 | * @op: operation doing the user buffer copy | 30 | * @op: operation doing the user buffer copy |
| 31 | * @userbuf: user buffer to copy data from (NOT NULL) | 31 | * @userbuf: user buffer to copy data from (NOT NULL) |
| 32 | * @alloc_size: size of user buffer | 32 | * @alloc_size: size of user buffer (REQUIRES: @alloc_size >= @copy_size) |
| 33 | * @copy_size: size of data to copy from user buffer | 33 | * @copy_size: size of data to copy from user buffer |
| 34 | * @pos: position write is at in the file (NOT NULL) | 34 | * @pos: position write is at in the file (NOT NULL) |
| 35 | * | 35 | * |
| @@ -42,6 +42,8 @@ static char *aa_simple_write_to_buffer(int op, const char __user *userbuf, | |||
| 42 | { | 42 | { |
| 43 | char *data; | 43 | char *data; |
| 44 | 44 | ||
| 45 | BUG_ON(copy_size > alloc_size); | ||
| 46 | |||
| 45 | if (*pos != 0) | 47 | if (*pos != 0) |
| 46 | /* only writes from pos 0, that is complete writes */ | 48 | /* only writes from pos 0, that is complete writes */ |
| 47 | return ERR_PTR(-ESPIPE); | 49 | return ERR_PTR(-ESPIPE); |
