
Pass the size of the weight vector into crush_do_rule() to ensure that we don't access values past the end. This can happen if the caller misbehaves and passes a weight vector that is smaller than max_devices. Currently the monitor tries to prevent that from happening, but this will gracefully tolerate previous bad osdmaps that got into this state. It's also a bit more defensive. Reflects ceph.git commit 5922e2c2b8335b5e46c9504349c3a55b7434c01a. Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com> Reviewed-by: Sage Weil <sage@inktank.com>
20 lines
441 B
C
20 lines
441 B
C
#ifndef CEPH_CRUSH_MAPPER_H
|
|
#define CEPH_CRUSH_MAPPER_H
|
|
|
|
/*
|
|
* CRUSH functions for find rules and then mapping an input to an
|
|
* output set.
|
|
*
|
|
* LGPL2
|
|
*/
|
|
|
|
#include <linux/crush/crush.h>
|
|
|
|
extern int crush_find_rule(const struct crush_map *map, int ruleset, int type, int size);
|
|
extern int crush_do_rule(const struct crush_map *map,
|
|
int ruleno,
|
|
int x, int *result, int result_max,
|
|
const __u32 *weights, int weight_max);
|
|
|
|
#endif
|