summaryrefslogtreecommitdiffstats
path: root/drivers/staging/ozwpan/ozpd.h
diff options
context:
space:
mode:
authorRupesh Gujare2013-08-05 13:28:33 +0200
committerGreg Kroah-Hartman2013-08-12 23:02:58 +0200
commitb2271b5bdf1fd8b7d5442e2452e9242b88c56e8f (patch)
treeeb5c4d0f2fa8bb4f5fed94e4308d0f7cb7bf530a /drivers/staging/ozwpan/ozpd.h
parentstaging: ozwpan: Fix build warning. (diff)
downloadkernel-qcow2-linux-b2271b5bdf1fd8b7d5442e2452e9242b88c56e8f.tar.gz
kernel-qcow2-linux-b2271b5bdf1fd8b7d5442e2452e9242b88c56e8f.tar.xz
kernel-qcow2-linux-b2271b5bdf1fd8b7d5442e2452e9242b88c56e8f.zip
staging: ozwpan: Fix farewell report.
This patch fix following issues reported by Dan:- 1) There is no check limiting the size to 32 and it could be up to 253 bytes. 2) Use defines instead of magic numbers. 3) The oz_farewell struct is supposed to be a variable length struct but the variable part is put in the middle. It doesn't make any sense to put the length of the variable size array after then end of the array because we can never find it again! Put the variable size array at the end. Make it a zero length array. u8 len; u8 report[0]; 4) In oz_add_farewell() we do this: f = kmalloc(sizeof(struct oz_farewell) + len - 1, GFP_ATOMIC); The "- 1" refers to sizeof(f->report) but because it was a magic number then it was missed when the sizeof(f->report) changed. 5) In [patch 6/6] we set the ->len member. But because it is at the end of a variable length array with no limit check the remote attacker can just rewrite it using the memcpy() on the next line. Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Rupesh Gujare <rupesh.gujare@atmel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/ozwpan/ozpd.h')
-rw-r--r--drivers/staging/ozwpan/ozpd.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/staging/ozwpan/ozpd.h b/drivers/staging/ozwpan/ozpd.h
index 57e98c897711..996ef65ed315 100644
--- a/drivers/staging/ozwpan/ozpd.h
+++ b/drivers/staging/ozwpan/ozpd.h
@@ -48,8 +48,8 @@ struct oz_farewell {
struct list_head link;
u8 ep_num;
u8 index;
- u8 report[32];
u8 len;
+ u8 report[0];
};
/* Data structure that holds information on a specific peripheral device (PD).