usb: typec: ucsi: Clear PPM capability data in ucsi_init() error path
stable inclusion from stable-v5.10.44 commit 572de10087a9f1a3475bede9ca54326d41c9523c bugzilla: https://bugzilla.openeuler.org/show_bug.cgi?id=398 CVE: NA ------------------------------------------------- commit f247f0a8 upstream. If ucsi_init() fails for some reason (e.g. ucsi_register_port() fails or general communication failure to the PPM), particularly at any point after the GET_CAPABILITY command had been issued, this results in unwinding the initialization and returning an error. However the ucsi structure's ucsi_capability member retains its current value, including likely a non-zero num_connectors. And because ucsi_init() itself is done in a workqueue a UCSI interface driver will be unaware that it failed and may think the ucsi_register() call was completely successful. Later, if ucsi_unregister() is called, due to this stale ucsi->cap value it would try to access the items in the ucsi->connector array which might not be in a proper state or not even allocated at all and results in NULL or invalid pointer dereference. Fix this by clearing the ucsi->cap value to 0 during the error path of ucsi_init() in order to prevent a later ucsi_unregister() from entering the connector cleanup loop. Fixes: c1b0bc2d ("usb: typec: Add support for UCSI interface") Cc: stable@vger.kernel.org Acked-by: NHeikki Krogerus <heikki.krogerus@linux.intel.com> Signed-off-by: NMayank Rana <mrana@codeaurora.org> Signed-off-by: NJack Pham <jackp@codeaurora.org> Link: https://lore.kernel.org/r/20210609073535.5094-1-jackp@codeaurora.orgSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Nsmilezhangs <smilezhangs@163.com> Reviewed-by: Jian Cheng <cj.chengjian(a)huawei.com>
Showing
想要评论请 注册 或 登录