mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
zdev: Fix off-by one errors in cio_ignore handling
chzdev fails to generate correct cio_ignore udev-rules for a CCW device with device number 0xffff. Also chzdev aborts due to a segmentation fault when a CCW device with CSSID 0xff is configured. Both issues are caused by off-by-one errors while interpreting CCW device ID limits CSSID_MAX, SSID_MAX and DEVNO_MAX. Fix these errors by correctly interpreting CCW device ID limits. Signed-off-by: Peter Oberparleiter <oberpar@linux.ibm.com> Reviewed-by: Jan Höppner <hoeppner@linux.ibm.com> Reviewed-by: Vineeth Vijayan <vneethv@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This commit is contained in:
committed by
Jan Höppner
parent
b5604850ab
commit
e8fca95592
@@ -804,17 +804,17 @@ void ccw_unblacklist_id_range(const char *range)
|
||||
|
||||
static char ***id_bitmap_new(void)
|
||||
{
|
||||
return misc_malloc(sizeof(char **) * CSSID_MAX);
|
||||
return misc_malloc(sizeof(char **) * (CSSID_MAX + 1));
|
||||
}
|
||||
|
||||
static void id_bitmap_free(char ***id_bitmap)
|
||||
{
|
||||
unsigned int cssid, ssid;
|
||||
|
||||
for (cssid = 0; cssid < CSSID_MAX; cssid++) {
|
||||
for (cssid = 0; cssid <= CSSID_MAX; cssid++) {
|
||||
if (!id_bitmap[cssid])
|
||||
continue;
|
||||
for (ssid = 0; ssid < SSID_MAX; ssid++)
|
||||
for (ssid = 0; ssid <= SSID_MAX; ssid++)
|
||||
free(id_bitmap[cssid][ssid]);
|
||||
free(id_bitmap[cssid]);
|
||||
}
|
||||
@@ -965,15 +965,15 @@ static struct util_list *cio_ignore_get_ranges(bool autoconf)
|
||||
ranges = strlist_new();
|
||||
|
||||
id_bitmap = id_bitmap_collect(autoconf);
|
||||
for (cssid = 0; cssid < CSSID_MAX; cssid++) {
|
||||
for (cssid = 0; cssid <= CSSID_MAX; cssid++) {
|
||||
if (!id_bitmap[cssid])
|
||||
continue;
|
||||
for (ssid = 0; ssid < SSID_MAX; ssid++) {
|
||||
for (ssid = 0; ssid <= SSID_MAX; ssid++) {
|
||||
if (!id_bitmap[cssid][ssid])
|
||||
continue;
|
||||
first = NULL;
|
||||
last = NULL;
|
||||
for (devno = 0; devno < DEVNO_MAX; devno++) {
|
||||
for (devno = 0; devno <= DEVNO_MAX; devno++) {
|
||||
if (!id_bitmap_get(id_bitmap, cssid, ssid,
|
||||
devno)) {
|
||||
if (first) {
|
||||
|
||||
Reference in New Issue
Block a user