Bluetooth: Fix not checking for valid hdev on bt_dev_{info,warn,err,dbg}
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Thu, 3 Mar 2022 21:11:57 +0000 (13:11 -0800)
committerMarcel Holtmann <marcel@holtmann.org>
Fri, 4 Mar 2022 15:10:50 +0000 (16:10 +0100)
This fixes attemting to print hdev->name directly which causes them to
print an error:

kernel: read_version:367: (efault): sock 000000006a3008f2

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
include/net/bluetooth/bluetooth.h

index a647e5fabdbd6d767413c6b0e3382177ccf518df..2aa5e95808a5a8ae860215ed29c95c8d76b9311f 100644 (file)
@@ -204,19 +204,21 @@ void bt_err_ratelimited(const char *fmt, ...);
 #define BT_DBG(fmt, ...)       pr_debug(fmt "\n", ##__VA_ARGS__)
 #endif
 
+#define bt_dev_name(hdev) ((hdev) ? (hdev)->name : "null")
+
 #define bt_dev_info(hdev, fmt, ...)                            \
-       BT_INFO("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
+       BT_INFO("%s: " fmt, bt_dev_name(hdev), ##__VA_ARGS__)
 #define bt_dev_warn(hdev, fmt, ...)                            \
-       BT_WARN("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
+       BT_WARN("%s: " fmt, bt_dev_name(hdev), ##__VA_ARGS__)
 #define bt_dev_err(hdev, fmt, ...)                             \
-       BT_ERR("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
+       BT_ERR("%s: " fmt, bt_dev_name(hdev), ##__VA_ARGS__)
 #define bt_dev_dbg(hdev, fmt, ...)                             \
-       BT_DBG("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
+       BT_DBG("%s: " fmt, bt_dev_name(hdev), ##__VA_ARGS__)
 
 #define bt_dev_warn_ratelimited(hdev, fmt, ...)                        \
-       bt_warn_ratelimited("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
+       bt_warn_ratelimited("%s: " fmt, bt_dev_name(hdev), ##__VA_ARGS__)
 #define bt_dev_err_ratelimited(hdev, fmt, ...)                 \
-       bt_err_ratelimited("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
+       bt_err_ratelimited("%s: " fmt, bt_dev_name(hdev), ##__VA_ARGS__)
 
 /* Connection and socket states */
 enum {