• Joseph Qi's avatar
    blk-throttle: fix NULL pointer dereference in throtl_schedule_pending_timer · a41b816c
    Joseph Qi authored
    I have encountered a NULL pointer dereference in
    throtl_schedule_pending_timer:
      [  413.735396] BUG: unable to handle kernel NULL pointer dereference at 0000000000000038
      [  413.735535] IP: [<ffffffff812ebbbf>] throtl_schedule_pending_timer+0x3f/0x210
      [  413.735643] PGD 22c8cf067 PUD 22cb34067 PMD 0
      [  413.735713] Oops: 0000 [#1] SMP
      ......
    
    This is caused by the following case:
      blk_throtl_bio
        throtl_schedule_next_dispatch  <= sq is top level one without parent
          throtl_schedule_pending_timer
            sq_to_tg(sq)->td->throtl_slice  <= sq_to_tg(sq) returns NULL
    
    Fix it by using sq_to_td instead of sq_to_tg(sq)->td, which will always
    return a valid td.
    
    Fixes: 297e3d85 ("blk-throttle: make throtl_slice tunable")
    Signed-off-by: default avatarJoseph Qi <qijiang.qj@alibaba-inc.com>
    Reviewed-by: default avatarShaohua Li <shli@fb.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    a41b816c
blk-throttle.c 67 KB