]>
Commit | Line | Data |
---|---|---|
aab2f4b8 GKH |
1 | From f3f63c1c28bc861a931fac283b5bc3585efb8967 Mon Sep 17 00:00:00 2001 |
2 | From: Jens Axboe <jaxboe@fusionio.com> | |
3 | Date: Fri, 29 Oct 2010 11:46:56 -0600 | |
4 | Subject: block: limit vec count in bio_kmalloc() and bio_alloc_map_data() | |
5 | ||
6 | From: Jens Axboe <jaxboe@fusionio.com> | |
7 | ||
8 | commit f3f63c1c28bc861a931fac283b5bc3585efb8967 upstream. | |
9 | ||
10 | Reported-by: Dan Rosenberg <drosenberg@vsecurity.com> | |
11 | Signed-off-by: Jens Axboe <jaxboe@fusionio.com> | |
12 | Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> | |
13 | ||
14 | --- | |
15 | fs/bio.c | 9 ++++++++- | |
16 | 1 file changed, 8 insertions(+), 1 deletion(-) | |
17 | ||
18 | --- a/fs/bio.c | |
19 | +++ b/fs/bio.c | |
20 | @@ -371,6 +371,9 @@ struct bio *bio_kmalloc(gfp_t gfp_mask, | |
21 | { | |
22 | struct bio *bio; | |
23 | ||
24 | + if (nr_iovecs > UIO_MAXIOV) | |
25 | + return NULL; | |
26 | + | |
27 | bio = kmalloc(sizeof(struct bio) + nr_iovecs * sizeof(struct bio_vec), | |
28 | gfp_mask); | |
29 | if (unlikely(!bio)) | |
30 | @@ -701,8 +704,12 @@ static void bio_free_map_data(struct bio | |
31 | static struct bio_map_data *bio_alloc_map_data(int nr_segs, int iov_count, | |
32 | gfp_t gfp_mask) | |
33 | { | |
34 | - struct bio_map_data *bmd = kmalloc(sizeof(*bmd), gfp_mask); | |
35 | + struct bio_map_data *bmd; | |
36 | + | |
37 | + if (iov_count > UIO_MAXIOV) | |
38 | + return NULL; | |
39 | ||
40 | + bmd = kmalloc(sizeof(*bmd), gfp_mask); | |
41 | if (!bmd) | |
42 | return NULL; | |
43 |