Skip to content

Commit 6fa92e2

Browse files
shawn1221gregkh
authored andcommitted
staging: ion: fix corruption of ion_import_dma_buf
we found this issue but still exit in lastest kernel. Simply keep ion_handle_create under mutex_lock to avoid this race. WARNING: CPU: 2 PID: 2648 at drivers/staging/android/ion/ion.c:512 ion_handle_add+0xb4/0xc0() ion_handle_add: buffer already found. Modules linked in: iwlmvm iwlwifi mac80211 cfg80211 compat CPU: 2 PID: 2648 Comm: TimedEventQueue Tainted: G W 3.14.0 #7 00000000 00000000 9a3efd2c 80faf273 9a3efd6c 9a3efd5c 80935dc9 811d7fd3 9a3efd88 00000a58 812208a0 00000200 80e128d4 80e128d4 8d4ae00c a8cd8600 a8cd8094 9a3efd74 80935e0e 00000009 9a3efd6c 811d7fd3 9a3efd88 9a3efd9c Call Trace: [<80faf273>] dump_stack+0x48/0x69 [<80935dc9>] warn_slowpath_common+0x79/0x90 [<80e128d4>] ? ion_handle_add+0xb4/0xc0 [<80e128d4>] ? ion_handle_add+0xb4/0xc0 [<80935e0e>] warn_slowpath_fmt+0x2e/0x30 [<80e128d4>] ion_handle_add+0xb4/0xc0 [<80e144cc>] ion_import_dma_buf+0x8c/0x110 [<80c517c4>] reg_init+0x364/0x7d0 [<80993363>] ? futex_wait+0x123/0x210 [<80992e0e>] ? get_futex_key+0x16e/0x1e0 [<8099308f>] ? futex_wake+0x5f/0x120 [<80c51e19>] vpu_service_ioctl+0x1e9/0x500 [<80994aec>] ? do_futex+0xec/0x8e0 [<80971080>] ? prepare_to_wait_event+0xc0/0xc0 [<80c51c30>] ? reg_init+0x7d0/0x7d0 [<80a22562>] do_vfs_ioctl+0x2d2/0x4c0 [<80b198ad>] ? inode_has_perm.isra.41+0x2d/0x40 [<80b199cf>] ? file_has_perm+0x7f/0x90 [<80b1a5f7>] ? selinux_file_ioctl+0x47/0xf0 [<80a227a8>] SyS_ioctl+0x58/0x80 [<80fb45e8>] syscall_call+0x7/0x7 [<80fb0000>] ? mmc_do_calc_max_discard+0xab/0xe4 Fixes: 83271f6 ("ion: hold reference to handle...") Signed-off-by: Shawn Lin <[email protected]> Reviewed-by: Laura Abbott <[email protected]> Cc: stable <[email protected]> # 3.14+ Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 989e503 commit 6fa92e2

File tree

1 file changed

+3
-3
lines changed
  • drivers/staging/android/ion

1 file changed

+3
-3
lines changed

drivers/staging/android/ion/ion.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1179,13 +1179,13 @@ struct ion_handle *ion_import_dma_buf(struct ion_client *client, int fd)
11791179
mutex_unlock(&client->lock);
11801180
goto end;
11811181
}
1182-
mutex_unlock(&client->lock);
11831182

11841183
handle = ion_handle_create(client, buffer);
1185-
if (IS_ERR(handle))
1184+
if (IS_ERR(handle)) {
1185+
mutex_unlock(&client->lock);
11861186
goto end;
1187+
}
11871188

1188-
mutex_lock(&client->lock);
11891189
ret = ion_handle_add(client, handle);
11901190
mutex_unlock(&client->lock);
11911191
if (ret) {

0 commit comments

Comments
 (0)