• Brad Love's avatar
    media: lgdt3306a: Set fe ops.release to NULL if probed · 5b3a8e90
    Brad Love authored
    If release is part of frontend ops then it is called in the
    course of dvb_frontend_detach. The process also decrements
    the module usage count. The problem is if the lgdt3306a
    driver is reached via i2c_new_device, then when it is
    eventually destroyed remove is called, which further
    decrements the module usage count to negative. After this
    occurs the driver is in a bad state and no longer works.
    Also fixed by NULLing out the release callback is a double
    kfree of state, which introduces arbitrary oopses/GPF.
    This problem is only currently reachable via the em28xx driver.
    
    On disconnect of Hauppauge SoloHD before:
    
    lsmod | grep lgdt3306a
    lgdt3306a              28672  -1
    i2c_mux                16384  1 lgdt3306a
    
    On disconnect of Hauppauge SoloHD after:
    
    lsmod | grep lgdt3306a
    lgdt3306a              28672  0
    i2c_mux                16384  1 lgdt3306a
    Signed-off-by: default avatarBrad Love <brad@nextdimension.cc>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
    5b3a8e90
lgdt3306a.c 54.3 KB