dm: reject trailing characters in sccanf input
[deliverable/linux.git] / drivers / md / dm-table.c
index 8e91321301424afda07c456a8b6ae53aec524d04..2e227fbf1622c075c6fc543f5b2d30fb2bf7dbd7 100644 (file)
@@ -268,8 +268,7 @@ void dm_table_destroy(struct dm_table *t)
        vfree(t->highs);
 
        /* free the device list */
-       if (t->devices.next != &t->devices)
-               free_devices(&t->devices);
+       free_devices(&t->devices);
 
        dm_free_md_mempools(t->mempools);
 
@@ -464,10 +463,11 @@ int dm_get_device(struct dm_target *ti, const char *path, fmode_t mode,
        struct dm_dev_internal *dd;
        unsigned int major, minor;
        struct dm_table *t = ti->table;
+       char dummy;
 
        BUG_ON(!t);
 
-       if (sscanf(path, "%u:%u", &major, &minor) == 2) {
+       if (sscanf(path, "%u:%u%c", &major, &minor, &dummy) == 2) {
                /* Extract the major/minor numbers */
                dev = MKDEV(major, minor);
                if (MAJOR(dev) != major || MINOR(dev) != minor)
@@ -699,7 +699,7 @@ static int validate_hardware_logical_block_alignment(struct dm_table *table,
        while (i < dm_table_get_num_targets(table)) {
                ti = dm_table_get_target(table, i++);
 
-               blk_set_default_limits(&ti_limits);
+               blk_set_stacking_limits(&ti_limits);
 
                /* combine all target devices' limits */
                if (ti->type->iterate_devices)
@@ -842,9 +842,10 @@ static int validate_next_arg(struct dm_arg *arg, struct dm_arg_set *arg_set,
                             unsigned *value, char **error, unsigned grouped)
 {
        const char *arg_str = dm_shift_arg(arg_set);
+       char dummy;
 
        if (!arg_str ||
-           (sscanf(arg_str, "%u", value) != 1) ||
+           (sscanf(arg_str, "%u%c", value, &dummy) != 1) ||
            (*value < arg->min) ||
            (*value > arg->max) ||
            (grouped && arg_set->argc < *value)) {
@@ -1221,10 +1222,10 @@ int dm_calculate_queue_limits(struct dm_table *table,
        struct queue_limits ti_limits;
        unsigned i = 0;
 
-       blk_set_default_limits(limits);
+       blk_set_stacking_limits(limits);
 
        while (i < dm_table_get_num_targets(table)) {
-               blk_set_default_limits(&ti_limits);
+               blk_set_stacking_limits(&ti_limits);
 
                ti = dm_table_get_target(table, i++);
 
This page took 0.026532 seconds and 5 git commands to generate.