Commit c90fad3
media: ivtv: Fix invalid access to file *
Since commit 9ba9d11 ("media: ivtv: Access v4l2_fh from file")
all ioctl handlers have been ported to operate on the file * first
function argument.
The ivtv DVB layer calls ivtv_init_on_first_open() when the driver
needs to start streaming. This function calls the s_input() and
s_frequency() ioctl handlers directly, but being called from the driver
context, it doesn't have a valid file * to pass them. This causes the
ioctl handlers to deference an invalid pointer.
Fix this by moving the implementation of those ioctls to two helper
functions.
The ivtv_do_s_input() helper accepts a struct ivtv * as first argument,
which is easily accessible in ivtv_init_on_first_open() as well as from
the file * argument of the ioctl handler.
The ivtv_s_frequency() takes an ivtv_stream * instead. The stream * can
safely be accessed in ivtv_init_on_first_open() where it is hard-coded
to the IVTV_ENC_STREAM_TYPE_MPG stream type, as well as from the ioctl
handler as a valid stream type is associated to each open file handle
depending on which video device node has been opened in the ivtv_open()
file operation.
The bug has been reported by Smatch.
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Closes: https://lore.kernel.org/all/aKL4OMWsESUdX8KQ@stanley.mountain/
Fixes: 9ba9d11 ("media: ivtv: Access v4l2_fh from file")
Cc: stable@vger.kernel.org
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Tested-by: Hans Verkuil <hverkuil+cisco@kernel.org>
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>1 parent 512f0b7 commit c90fad3
3 files changed
Lines changed: 25 additions & 14 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1247 | 1247 | | |
1248 | 1248 | | |
1249 | 1249 | | |
1250 | | - | |
1251 | 1250 | | |
1252 | | - | |
| 1251 | + | |
| 1252 | + | |
1253 | 1253 | | |
1254 | 1254 | | |
1255 | 1255 | | |
1256 | | - | |
1257 | | - | |
1258 | | - | |
1259 | 1256 | | |
1260 | 1257 | | |
1261 | 1258 | | |
| |||
1297 | 1294 | | |
1298 | 1295 | | |
1299 | 1296 | | |
1300 | | - | |
| 1297 | + | |
1301 | 1298 | | |
1302 | 1299 | | |
1303 | 1300 | | |
1304 | 1301 | | |
1305 | 1302 | | |
1306 | | - | |
| 1303 | + | |
1307 | 1304 | | |
1308 | 1305 | | |
1309 | 1306 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
974 | 974 | | |
975 | 975 | | |
976 | 976 | | |
977 | | - | |
| 977 | + | |
978 | 978 | | |
979 | | - | |
980 | 979 | | |
981 | 980 | | |
982 | 981 | | |
| |||
1017 | 1016 | | |
1018 | 1017 | | |
1019 | 1018 | | |
| 1019 | + | |
| 1020 | + | |
| 1021 | + | |
| 1022 | + | |
| 1023 | + | |
1020 | 1024 | | |
1021 | 1025 | | |
1022 | 1026 | | |
| |||
1065 | 1069 | | |
1066 | 1070 | | |
1067 | 1071 | | |
1068 | | - | |
| 1072 | + | |
1069 | 1073 | | |
1070 | | - | |
1071 | | - | |
| 1074 | + | |
1072 | 1075 | | |
1073 | 1076 | | |
1074 | 1077 | | |
| |||
1082 | 1085 | | |
1083 | 1086 | | |
1084 | 1087 | | |
| 1088 | + | |
| 1089 | + | |
| 1090 | + | |
| 1091 | + | |
| 1092 | + | |
| 1093 | + | |
| 1094 | + | |
| 1095 | + | |
| 1096 | + | |
1085 | 1097 | | |
1086 | 1098 | | |
1087 | 1099 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| 12 | + | |
| 13 | + | |
12 | 14 | | |
13 | 15 | | |
14 | 16 | | |
| |||
17 | 19 | | |
18 | 20 | | |
19 | 21 | | |
20 | | - | |
21 | | - | |
| 22 | + | |
| 23 | + | |
22 | 24 | | |
23 | 25 | | |
0 commit comments