]> git.karo-electronics.de Git - karo-tx-linux.git/commit
dm table: remove unused buggy code that extends the targets array
authorMikulas Patocka <mpatocka@redhat.com>
Sat, 23 Nov 2013 00:51:39 +0000 (19:51 -0500)
committerMike Snitzer <snitzer@redhat.com>
Tue, 17 Dec 2013 23:01:17 +0000 (18:01 -0500)
commit54a0d0087b265c6083a14509fd99295d5ebeb99e
treeec5ec772a766a1cb56b83dc98280424ec20791ef
parent6d03f6ac888f2cfc9c840db0b965436d32f1816d
dm table: remove unused buggy code that extends the targets array

A device mapper table is allocated in the following way:
* The function dm_table_create is called, it gets the number of targets
  as an argument -- it allocates a targets array accordingly.
* For each target, we call dm_table_add_target.

If we add more targets than were specified in dm_table_create, the
function dm_table_add_target reallocates the targets array.  However,
this reallocation code is wrong - it moves the targets array to a new
location, while some target constructors hold pointers to the array in
the old location.

The following DM target drivers save the pointer to the target
structure, so they corrupt memory if the target array is moved:
multipath, raid, mirror, snapshot, stripe, switch, thin, verity.

Under normal circumstances, the reallocation function is not called
(because dm_table_create is called with the correct number of targets),
so the buggy reallocation code is not used.

Prior to the fix "dm table: fail dm_table_create on dm_round_up
overflow", the reallocation code could only be used in case the user
specifies too large a value in param->target_count, such as 0xffffffff.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-table.c