| From: Laura Abbott <labbott@redhat.com> |
| Date: Mon, 14 May 2018 14:35:09 -0700 |
| Subject: staging: android: ion: Switch to pr_warn_once in ion_buffer_destroy |
| |
| commit 45ad559a29629cb1c64ee636563c69b71524f077 upstream. |
| |
| Syzbot reported yet another warning with Ion: |
| |
| WARNING: CPU: 0 PID: 1467 at drivers/staging/android/ion/ion.c:122 |
| ion_buffer_destroy+0xd4/0x190 drivers/staging/android/ion/ion.c:122 |
| Kernel panic - not syncing: panic_on_warn set ... |
| |
| This is catching that a buffer was freed with an existing kernel mapping |
| still present. This can be easily be triggered from userspace by calling |
| DMA_BUF_SYNC_START without calling DMA_BUF_SYNC_END. Switch to a single |
| pr_warn_once to indicate the error without being disruptive. |
| |
| Reported-by: syzbot+cd8bcd40cb049efa2770@syzkaller.appspotmail.com |
| Reported-by: syzbot <syzkaller@googlegroups.com> |
| Signed-off-by: Laura Abbott <labbott@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| [bwh: Backported to 3.16: adjust context] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/staging/android/ion/ion.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/staging/android/ion/ion.c |
| +++ b/drivers/staging/android/ion/ion.c |
| @@ -272,8 +272,11 @@ err2: |
| |
| void ion_buffer_destroy(struct ion_buffer *buffer) |
| { |
| - if (WARN_ON(buffer->kmap_cnt > 0)) |
| + if (buffer->kmap_cnt > 0) { |
| + pr_warn_once("%s: buffer still mapped in the kernel\n", |
| + __func__); |
| buffer->heap->ops->unmap_kernel(buffer->heap, buffer); |
| + } |
| buffer->heap->ops->unmap_dma(buffer->heap, buffer); |
| buffer->heap->ops->free(buffer); |
| if (buffer->pages) |