Skip to content

Commit

Permalink
crush: fix crash from invalid 'take' argument
Browse files Browse the repository at this point in the history
Verify that the 'take' argument is a valid device or bucket.
Otherwise ignore it (do not add the value to the working vector).

Reflects ceph.git commit 9324d0a1af61e1c234cc48e2175b4e6320fff8f4.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
  • Loading branch information
Ilya Dryomov committed Jun 25, 2015
1 parent 687265e commit 8f52979
Showing 1 changed file with 9 additions and 2 deletions.
11 changes: 9 additions & 2 deletions net/ceph/crush/mapper.c
Original file line number Diff line number Diff line change
Expand Up @@ -790,8 +790,15 @@ int crush_do_rule(const struct crush_map *map,

switch (curstep->op) {
case CRUSH_RULE_TAKE:
w[0] = curstep->arg1;
wsize = 1;
if ((curstep->arg1 >= 0 &&
curstep->arg1 < map->max_devices) ||
(-1-curstep->arg1 < map->max_buckets &&
map->buckets[-1-curstep->arg1])) {
w[0] = curstep->arg1;
wsize = 1;
} else {
dprintk(" bad take value %d\n", curstep->arg1);
}
break;

case CRUSH_RULE_SET_CHOOSE_TRIES:
Expand Down

0 comments on commit 8f52979

Please sign in to comment.