diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c index 53f2864efeaa1..fa980b2442aaa 100644 --- a/crypto/algif_hash.c +++ b/crypto/algif_hash.c @@ -284,10 +284,6 @@ static int hash_accept(struct socket *sock, struct socket *newsock, int flags) return err; err = crypto_ahash_import(&ctx2->req, state); - if (err) { - sock_orphan(sk2); - sock_put(sk2); - } return err; } diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 730558b79fa11..c0f9a15de2d63 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -2678,10 +2678,10 @@ static void raid5_end_write_request(struct bio *bi, int error) if (!test_and_clear_bit(R5_DOUBLE_LOCKED, &sh->dev[i].flags)) clear_bit(R5_LOCKED, &sh->dev[i].flags); set_bit(STRIPE_HANDLE, &sh->state); - raid5_release_stripe(sh); if (sh->batch_head && sh != sh->batch_head) raid5_release_stripe(sh->batch_head); + raid5_release_stripe(sh); } static void raid5_error(struct mddev *mddev, struct md_rdev *rdev) diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c index 238aafce0422d..34043e6cbc82e 100644 --- a/kernel/posix-cpu-timers.c +++ b/kernel/posix-cpu-timers.c @@ -1325,6 +1325,15 @@ void run_posix_cpu_timers(struct task_struct *tsk) BUG_ON(!irqs_disabled()); + /* + * Ensure that release_task(tsk) can't happen while + * handle_posix_cpu_timers() is running. Otherwise, a concurrent + * posix_cpu_timer_del() may fail to lock_task_sighand(tsk) and + * miss timer->it.cpu.firing != 0. + */ + if (tsk->exit_state) + return; + /* * The fast path checks that there are no expired thread or thread * group timers. If that's so, just return.