From 9470e4a693db84bee7becbba8de01af02bb23c9f Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Fri, 19 Jun 2015 10:19:36 -0600 Subject: [PATCH] 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: Andrey Wagin Fixes: e48453c3 ("block, cgroup: implement policy-specific per-blkcg data") Signed-off-by: Jens Axboe --- block/cfq-iosched.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index dbd0207928fb..ed86fb242cd4 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c @@ -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; } -- 2.20.1