diff options
author | Philipp Reisner <philipp.reisner@linbit.com> | 2012-04-06 06:08:51 -0400 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2012-11-08 10:58:26 -0500 |
commit | e4bad1bcacd82b3d7727e30db26be3580bdc722a (patch) | |
tree | 8c276ba45b16777b72002d05fdf64f3bccd2eb02 /drivers/block/drbd | |
parent | a1096a6e9da7885ec9e11d93aa459685a33fa4d9 (diff) |
drbd: Ensure that data_size is not 0 before using data_size-1 as index
This could be exploited by a peer which runs modified code.
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd')
-rw-r--r-- | drivers/block/drbd/drbd_receiver.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index 7b690342efa6..349bd51773e5 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c | |||
@@ -3344,10 +3344,10 @@ static int receive_SyncParam(struct drbd_tconn *tconn, struct packet_info *pi) | |||
3344 | 3344 | ||
3345 | if (apv >= 88) { | 3345 | if (apv >= 88) { |
3346 | if (apv == 88) { | 3346 | if (apv == 88) { |
3347 | if (data_size > SHARED_SECRET_MAX) { | 3347 | if (data_size > SHARED_SECRET_MAX || data_size == 0) { |
3348 | dev_err(DEV, "verify-alg too long, " | 3348 | dev_err(DEV, "verify-alg of wrong size, " |
3349 | "peer wants %u, accepting only %u byte\n", | 3349 | "peer wants %u, accepting only up to %u byte\n", |
3350 | data_size, SHARED_SECRET_MAX); | 3350 | data_size, SHARED_SECRET_MAX); |
3351 | err = -EIO; | 3351 | err = -EIO; |
3352 | goto reconnect; | 3352 | goto reconnect; |
3353 | } | 3353 | } |