diff options
| -rw-r--r-- | net/bridge/br_ioctl.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/net/bridge/br_ioctl.c b/net/bridge/br_ioctl.c index 4e4119a12139..4c61a7e0a86e 100644 --- a/net/bridge/br_ioctl.c +++ b/net/bridge/br_ioctl.c | |||
| @@ -58,12 +58,13 @@ static int get_fdb_entries(struct net_bridge *br, void __user *userbuf, | |||
| 58 | { | 58 | { |
| 59 | int num; | 59 | int num; |
| 60 | void *buf; | 60 | void *buf; |
| 61 | size_t size = maxnum * sizeof(struct __fdb_entry); | 61 | size_t size; |
| 62 | 62 | ||
| 63 | if (size > PAGE_SIZE) { | 63 | /* Clamp size to PAGE_SIZE, test maxnum to avoid overflow */ |
| 64 | size = PAGE_SIZE; | 64 | if (maxnum > PAGE_SIZE/sizeof(struct __fdb_entry)) |
| 65 | maxnum = PAGE_SIZE/sizeof(struct __fdb_entry); | 65 | maxnum = PAGE_SIZE/sizeof(struct __fdb_entry); |
| 66 | } | 66 | |
| 67 | size = maxnum * sizeof(struct __fdb_entry); | ||
| 67 | 68 | ||
| 68 | buf = kmalloc(size, GFP_USER); | 69 | buf = kmalloc(size, GFP_USER); |
| 69 | if (!buf) | 70 | if (!buf) |
