[PATCH] media: cx25840: return -EOPNOTSUPP instead of WARN_ON in cx25840_init

Haris Awan posted 1 patch 3 weeks, 1 day ago
drivers/media/i2c/cx25840/cx25840-core.c | 28 +++++++++++-------------
1 file changed, 13 insertions(+), 15 deletions(-)
[PATCH] media: cx25840: return -EOPNOTSUPP instead of WARN_ON in cx25840_init
Posted by Haris Awan 3 weeks, 1 day ago
From: Muhammad Haris Awan <m.harisawan@icloud.com>
Subject: [PATCH] media: cx25840: return -EOPNOTSUPP instead of WARN_ON
in cx25840_init

cx25840_init() implements generic mode video output configuration only
for cx2584x chips. For other chips, it triggers a WARN_ON(1) and returns
0, falsely indicating successful initialization while leaving the chip
unconfigured and marking generic_mode as true.

Using WARN_ON() for unsupported hardware variants is discouraged as it
triggers kernel warnings and syzbot alerts on faulty or unsupported
devices.

Return -EOPNOTSUPP early if the chip is not a cx2584x variant so callers
(such as cxusb_medion_register_analog_subdevs()) can handle the error
cleanly.

Reported-by: syzbot+9123948aef13fe92d706@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=9123948aef13fe92d706
Tested-by: syzbot+9123948aef13fe92d706@syzkaller.appspotmail.com
Signed-off-by: Muhammad Haris Awan <m.harisawan@icloud.com>
---
 drivers/media/i2c/cx25840/cx25840-core.c | 28 +++++++++++-------------
 1 file changed, 13 insertions(+), 15 deletions(-)

diff --git a/drivers/media/i2c/cx25840/cx25840-core.c
b/drivers/media/i2c/cx25840/cx25840-core.c
index a8e21a28174f..6df912c9381b 100644
--- a/drivers/media/i2c/cx25840/cx25840-core.c
+++ b/drivers/media/i2c/cx25840/cx25840-core.c
@@ -2298,28 +2298,26 @@ static int cx25840_init(struct v4l2_subdev *sd, u32 val)
  struct cx25840_state *state = to_state(sd);

+ if (!is_cx2584x(state))
+ return -EOPNOTSUPP;
+
  state->generic_mode = true;

- if (is_cx2584x(state)) {
- /* set datasheet video output defaults */
- state->vid_config = CX25840_VCONFIG_FMT_BT656 |
-    CX25840_VCONFIG_RES_8BIT |
-    CX25840_VCONFIG_VBIRAW_DISABLED |
-    CX25840_VCONFIG_ANCDATA_ENABLED |
-    CX25840_VCONFIG_TASKBIT_ONE |
-    CX25840_VCONFIG_ACTIVE_HORIZONTAL |
-    CX25840_VCONFIG_VALID_NORMAL |
-    CX25840_VCONFIG_HRESETW_NORMAL |
-    CX25840_VCONFIG_CLKGATE_NONE |
-    CX25840_VCONFIG_DCMODE_DWORDS |
-    CX25840_VCONFIG_IDID0S_NORMAL |
-    CX25840_VCONFIG_VIPCLAMP_DISABLED;
-
- /* add additional settings */
- cx25840_vconfig_add(state, val);
- } else {
- /* TODO: generic mode needs to be developed for other chips */
- WARN_ON(1);
- }
+ /* set datasheet video output defaults */
+ state->vid_config = CX25840_VCONFIG_FMT_BT656 |
+    CX25840_VCONFIG_RES_8BIT |
+    CX25840_VCONFIG_VBIRAW_DISABLED |
+    CX25840_VCONFIG_ANCDATA_ENABLED |
+    CX25840_VCONFIG_TASKBIT_ONE |
+    CX25840_VCONFIG_ACTIVE_HORIZONTAL |
+    CX25840_VCONFIG_VALID_NORMAL |
+    CX25840_VCONFIG_HRESETW_NORMAL |
+    CX25840_VCONFIG_CLKGATE_NONE |
+    CX25840_VCONFIG_DCMODE_DWORDS |
+    CX25840_VCONFIG_IDID0S_NORMAL |
+    CX25840_VCONFIG_VIPCLAMP_DISABLED;
+
+ /* add additional settings */
+ cx25840_vconfig_add(state, val);

  return 0;
 }
--