| .. | .. |
|---|
| 43 | 43 | #include <linux/mount.h> |
|---|
| 44 | 44 | #include <linux/pseudo_fs.h> |
|---|
| 45 | 45 | |
|---|
| 46 | +#include <asm/kmap_types.h> |
|---|
| 46 | 47 | #include <linux/uaccess.h> |
|---|
| 47 | 48 | #include <linux/nospec.h> |
|---|
| 48 | 49 | |
|---|
| .. | .. |
|---|
| 334 | 335 | spin_lock(&mm->ioctx_lock); |
|---|
| 335 | 336 | rcu_read_lock(); |
|---|
| 336 | 337 | table = rcu_dereference(mm->ioctx_table); |
|---|
| 338 | + if (!table) |
|---|
| 339 | + goto out_unlock; |
|---|
| 340 | + |
|---|
| 337 | 341 | for (i = 0; i < table->nr; i++) { |
|---|
| 338 | 342 | struct kioctx *ctx; |
|---|
| 339 | 343 | |
|---|
| .. | .. |
|---|
| 347 | 351 | } |
|---|
| 348 | 352 | } |
|---|
| 349 | 353 | |
|---|
| 354 | +out_unlock: |
|---|
| 350 | 355 | rcu_read_unlock(); |
|---|
| 351 | 356 | spin_unlock(&mm->ioctx_lock); |
|---|
| 352 | 357 | return res; |
|---|
| .. | .. |
|---|
| 1761 | 1766 | list_del_init(&req->wait.entry); |
|---|
| 1762 | 1767 | list_del(&iocb->ki_list); |
|---|
| 1763 | 1768 | iocb->ki_res.res = mangle_poll(mask); |
|---|
| 1764 | | - if (iocb->ki_eventfd && !eventfd_signal_allowed()) { |
|---|
| 1769 | + if (iocb->ki_eventfd && eventfd_signal_count()) { |
|---|
| 1765 | 1770 | iocb = NULL; |
|---|
| 1766 | 1771 | INIT_WORK(&req->work, aio_poll_put_work); |
|---|
| 1767 | 1772 | schedule_work(&req->work); |
|---|