aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd
diff options
context:
space:
mode:
authorPhilipp Reisner <philipp.reisner@linbit.com>2012-04-06 06:08:51 -0400
committerPhilipp Reisner <philipp.reisner@linbit.com>2012-11-08 10:58:26 -0500
commite4bad1bcacd82b3d7727e30db26be3580bdc722a (patch)
tree8c276ba45b16777b72002d05fdf64f3bccd2eb02 /drivers/block/drbd
parenta1096a6e9da7885ec9e11d93aa459685a33fa4d9 (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.c8
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 }