Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9470e4a6 authored by Jens Axboe's avatar Jens Axboe
Browse files

cfq-iosched: fix sysfs oops when attempting to read unconfigured weights



If none of the devices in the system are using CFQ, then attempting to
read:

/sys/fs/cgroup/blkio/blkio.leaf_weight

will results in a NULL dereference. Check for a valid cfq_group_data
struct before attempting to dereference it.

Reported-by: default avatarAndrey Wagin <avagin@gmail.com>
Fixes: e48453c3 ("block, cgroup: implement policy-specific per-blkcg data")
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 4ceab71b
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -1714,16 +1714,26 @@ static int cfqg_print_leaf_weight_device(struct seq_file *sf, void *v)
static int cfq_print_weight(struct seq_file *sf, void *v)
{
	struct blkcg *blkcg = css_to_blkcg(seq_css(sf));
	struct cfq_group_data *cgd = blkcg_to_cfqgd(blkcg);
	unsigned int val = 0;

	seq_printf(sf, "%u\n", blkcg_to_cfqgd(blkcg)->weight);
	if (cgd)
		val = cgd->weight;

	seq_printf(sf, "%u\n", val);
	return 0;
}

static int cfq_print_leaf_weight(struct seq_file *sf, void *v)
{
	struct blkcg *blkcg = css_to_blkcg(seq_css(sf));
	struct cfq_group_data *cgd = blkcg_to_cfqgd(blkcg);
	unsigned int val = 0;

	if (cgd)
		val = cgd->leaf_weight;

	seq_printf(sf, "%u\n", blkcg_to_cfqgd(blkcg)->leaf_weight);
	seq_printf(sf, "%u\n", val);
	return 0;
}