From: Ben Hutchings <ben@decadent.org.uk> To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk, Jussi Kivilinna <jussi.kivilinna@mbnet.fi>, Gurucharan Shetty <gurucharan.shetty@gmail.com>, Herbert Xu <herbert@gondor.hengli.com.au> Subject: [ 22/82] crypto: cryptd - disable softirqs in cryptd_queue_worker to prevent data corruption Date: Wed, 14 Nov 2012 05:39:55 +0000 [thread overview] Message-ID: <20121114053936.947604243@decadent.org.uk> (raw) In-Reply-To: <20121114053933.726869752@decadent.org.uk> 3.2-stable review patch. If anyone has any objections, please let me know. ------------------ From: Jussi Kivilinna <jussi.kivilinna@mbnet.fi> commit 9efade1b3e981f5064f9db9ca971b4dc7557ae42 upstream. cryptd_queue_worker attempts to prevent simultaneous accesses to crypto workqueue by cryptd_enqueue_request using preempt_disable/preempt_enable. However cryptd_enqueue_request might be called from softirq context, so add local_bh_disable/local_bh_enable to prevent data corruption and panics. Bug report at http://marc.info/?l=linux-crypto-vger&m=134858649616319&w=2 v2: - Disable software interrupts instead of hardware interrupts Reported-by: Gurucharan Shetty <gurucharan.shetty@gmail.com> Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Ben Hutchings <ben@decadent.org.uk> --- crypto/cryptd.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/crypto/cryptd.c b/crypto/cryptd.c index 671d4d6..7bdd61b 100644 --- a/crypto/cryptd.c +++ b/crypto/cryptd.c @@ -137,13 +137,18 @@ static void cryptd_queue_worker(struct work_struct *work) struct crypto_async_request *req, *backlog; cpu_queue = container_of(work, struct cryptd_cpu_queue, work); - /* Only handle one request at a time to avoid hogging crypto - * workqueue. preempt_disable/enable is used to prevent - * being preempted by cryptd_enqueue_request() */ + /* + * Only handle one request at a time to avoid hogging crypto workqueue. + * preempt_disable/enable is used to prevent being preempted by + * cryptd_enqueue_request(). local_bh_disable/enable is used to prevent + * cryptd_enqueue_request() being accessed from software interrupts. + */ + local_bh_disable(); preempt_disable(); backlog = crypto_get_backlog(&cpu_queue->queue); req = crypto_dequeue_request(&cpu_queue->queue); preempt_enable(); + local_bh_enable(); if (!req) return;
WARNING: multiple messages have this Message-ID (diff)
From: Ben Hutchings <ben@decadent.org.uk> To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk, Jussi Kivilinna <jussi.kivilinna@mbnet.fi>, Gurucharan Shetty <gurucharan.shetty@gmail.com>, Herbert Xu <herbert@gondor.apana.org.au> Subject: [ 22/82] crypto: cryptd - disable softirqs in cryptd_queue_worker to prevent data corruption Date: Wed, 14 Nov 2012 05:39:55 +0000 [thread overview] Message-ID: <20121114053936.947604243@decadent.org.uk> (raw) In-Reply-To: <20121114053933.726869752@decadent.org.uk> 3.2-stable review patch. If anyone has any objections, please let me know. ------------------ From: Jussi Kivilinna <jussi.kivilinna@mbnet.fi> commit 9efade1b3e981f5064f9db9ca971b4dc7557ae42 upstream. cryptd_queue_worker attempts to prevent simultaneous accesses to crypto workqueue by cryptd_enqueue_request using preempt_disable/preempt_enable. However cryptd_enqueue_request might be called from softirq context, so add local_bh_disable/local_bh_enable to prevent data corruption and panics. Bug report at http://marc.info/?l=linux-crypto-vger&m=134858649616319&w=2 v2: - Disable software interrupts instead of hardware interrupts Reported-by: Gurucharan Shetty <gurucharan.shetty@gmail.com> Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Ben Hutchings <ben@decadent.org.uk> --- crypto/cryptd.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/crypto/cryptd.c b/crypto/cryptd.c index 671d4d6..7bdd61b 100644 --- a/crypto/cryptd.c +++ b/crypto/cryptd.c @@ -137,13 +137,18 @@ static void cryptd_queue_worker(struct work_struct *work) struct crypto_async_request *req, *backlog; cpu_queue = container_of(work, struct cryptd_cpu_queue, work); - /* Only handle one request at a time to avoid hogging crypto - * workqueue. preempt_disable/enable is used to prevent - * being preempted by cryptd_enqueue_request() */ + /* + * Only handle one request at a time to avoid hogging crypto workqueue. + * preempt_disable/enable is used to prevent being preempted by + * cryptd_enqueue_request(). local_bh_disable/enable is used to prevent + * cryptd_enqueue_request() being accessed from software interrupts. + */ + local_bh_disable(); preempt_disable(); backlog = crypto_get_backlog(&cpu_queue->queue); req = crypto_dequeue_request(&cpu_queue->queue); preempt_enable(); + local_bh_enable(); if (!req) return;
next prev parent reply other threads:[~2012-11-14 5:51 UTC|newest] Thread overview: 97+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-11-14 5:39 [ 00/82] 3.2.34-stable review Ben Hutchings 2012-11-14 5:39 ` [ 01/82] Bluetooth: Always compile SCO and L2CAP in Bluetooth Core Ben Hutchings 2012-11-14 21:24 ` Gustavo Padovan 2012-11-14 21:30 ` David Miller 2012-11-14 21:38 ` Ben Hutchings 2012-11-15 20:04 ` Ben Hutchings 2012-11-15 20:13 ` David Miller 2012-11-15 21:04 ` Gustavo Padovan 2012-11-15 21:08 ` David Miller 2012-11-15 22:05 ` Joe Perches 2012-11-15 21:07 ` Gustavo Padovan 2012-11-16 2:08 ` Ben Hutchings 2012-11-14 5:39 ` [ 02/82] x86: Remove the ancient and deprecated disable_hlt() and enable_hlt() facility Ben Hutchings 2012-11-14 5:39 ` [ 03/82] drm/nouveau: silence modesetting spam on pre-gf8 chipsets Ben Hutchings 2012-11-14 5:39 ` [ 04/82] drm/nouveau: fix suspend/resume when in headless mode Ben Hutchings 2012-11-14 5:39 ` [ 05/82] drm/nouveau: headless mode by default if pci class != vga display Ben Hutchings 2012-11-14 5:39 ` [ 06/82] nfsd: add get_uint for u32s Ben Hutchings 2012-11-14 5:39 ` [ 07/82] ALSA: PCM: Fix some races at disconnection Ben Hutchings 2012-11-14 5:39 ` [ 08/82] ALSA: usb-audio: Fix " Ben Hutchings 2012-11-14 5:39 ` [ 09/82] ALSA: usb-audio: Use rwsem for disconnect protection Ben Hutchings 2012-11-14 5:39 ` [ 10/82] ALSA: usb-audio: Fix races at disconnection in mixer_quirks.c Ben Hutchings 2012-11-14 5:39 ` [ 11/82] ALSA: Add a reference counter to card instance Ben Hutchings 2012-11-14 5:39 ` [ 12/82] ALSA: Avoid endless sleep after disconnect Ben Hutchings 2012-11-14 5:39 ` [ 13/82] drm/radeon: fix typo in evergreen_mc_resume() Ben Hutchings 2012-11-14 5:39 ` [ 14/82] USB: mos7840: remove unused variable Ben Hutchings 2012-11-14 5:39 ` [ 15/82] rtnetlink: Fix problem with buffer allocation Ben Hutchings 2012-11-14 5:39 ` [ 16/82] rtnetlink: fix rtnl_calcit() and rtnl_dump_ifinfo() Ben Hutchings 2012-11-14 5:39 ` [ 17/82] gpio-timberdale: fix a potential wrapping issue Ben Hutchings 2012-11-14 5:39 ` [ 18/82] cfg80211: fix antenna gain handling Ben Hutchings 2012-11-14 5:39 ` [ 19/82] drm/i915: fix overlay on i830M Ben Hutchings 2012-11-14 5:39 ` [ 20/82] drm/i915: fixup infoframe support for sdvo Ben Hutchings 2012-11-14 5:39 ` [ 21/82] drm/i915: clear the entire sdvo infoframe buffer Ben Hutchings 2012-11-14 5:39 ` Ben Hutchings [this message] 2012-11-14 5:39 ` [ 22/82] crypto: cryptd - disable softirqs in cryptd_queue_worker to prevent data corruption Ben Hutchings 2012-11-14 5:39 ` [ 23/82] ARM: at91: at91sam9g10: fix SOC type detection Ben Hutchings 2012-11-14 5:39 ` [ 24/82] ARM: at91/i2c: change id to let i2c-gpio work Ben Hutchings 2012-11-14 5:39 ` [ 25/82] mac80211: Only process mesh config header on frames that RA_MATCH Ben Hutchings 2012-11-14 5:39 ` [ 26/82] mac80211: dont inspect Sequence Control field on control frames Ben Hutchings 2012-11-14 5:40 ` [ 27/82] gpiolib: Dont return -EPROBE_DEFER to sysfs, or for invalid gpios Ben Hutchings 2012-11-15 17:52 ` Herton Ronaldo Krzesinski 2012-11-15 20:06 ` Ben Hutchings 2012-11-14 5:40 ` [ 28/82] mac80211: fix SSID copy on IBSS JOIN Ben Hutchings 2012-11-14 5:40 ` [ 29/82] wireless: drop invalid mesh address extension frames Ben Hutchings 2012-11-14 5:40 ` [ 30/82] mac80211: check management frame header length Ben Hutchings 2012-11-14 5:40 ` [ 31/82] mac80211: verify that skb data is present Ben Hutchings 2012-11-14 5:40 ` [ 32/82] mac80211: make sure data is accessible in EAPOL check Ben Hutchings 2012-11-14 5:40 ` [ 33/82] ath9k: fix stale pointers potentially causing access to freed skbs Ben Hutchings 2012-11-14 5:40 ` [ 34/82] floppy: do put_disk on current dr if blk_init_queue fails Ben Hutchings 2012-11-14 5:40 ` [ 35/82] floppy: properly handle failure on add_disk loop Ben Hutchings 2012-11-14 5:40 ` [ 36/82] xen/gntdev: dont leak memory from IOCTL_GNTDEV_MAP_GRANT_REF Ben Hutchings 2012-11-14 5:40 ` [ 37/82] rt2800: validate step value for temperature compensation Ben Hutchings 2012-11-14 5:40 ` [ 38/82] ath9k: Test for TID only in BlockAcks while checking tx status Ben Hutchings 2012-11-14 5:40 ` [ 39/82] module: fix out-by-one error in kallsyms Ben Hutchings 2012-11-14 5:40 ` [ 40/82] Input: tsc40 - remove wrong announcement of pressure support Ben Hutchings 2012-11-14 5:40 ` [ 41/82] HID: microsoft: fix invalid rdesc for 3k kbd Ben Hutchings 2012-11-14 5:40 ` [ 42/82] xen/mmu: Use Xen specific TLB flush instead of the generic one Ben Hutchings 2012-11-14 5:40 ` [ 43/82] NFS: Wait for session recovery to finish before returning Ben Hutchings 2012-11-14 5:40 ` [ 44/82] NFSv4.1: We must release the sequence id when we fail to get a session slot Ben Hutchings 2012-11-14 5:40 ` [ 45/82] NFSv4: nfs4_locku_done must release the sequence id Ben Hutchings 2012-11-14 5:40 ` [ 46/82] NFS: fix bug in legacy DNS resolver Ben Hutchings 2012-11-14 5:40 ` [ 47/82] nfsv3: Make v3 mounts fail with ETIMEDOUTs instead EIO on mountd timeouts Ben Hutchings 2012-11-14 5:40 ` [ 48/82] nfs: Show original device name verbatim in /proc/*/mount{s,info} Ben Hutchings 2012-11-14 5:40 ` [ 49/82] target: Dont return success from module_init() if setup fails Ben Hutchings 2012-11-14 5:40 ` [ 50/82] target: Avoid integer overflow in se_dev_align_max_sectors() Ben Hutchings 2012-11-14 5:40 ` [ 51/82] iscsi-target: Fix missed wakeup race in TX thread Ben Hutchings 2012-11-14 5:40 ` [ 52/82] DRM/Radeon: Fix Load Detection on legacy primary DAC Ben Hutchings 2012-11-14 5:40 ` [ 53/82] cifs: fix potential buffer overrun in cifs.idmap handling code Ben Hutchings 2012-11-14 5:40 ` [ 54/82] ALSA: hda: Cirrus: Fix coefficient index for beep configuration Ben Hutchings 2012-11-14 5:40 ` [ 55/82] ALSA: HDA: Fix digital microphone on CS420x Ben Hutchings 2012-11-14 5:40 ` [ 56/82] ALSA: hda - Force to reset IEC958 status bits for AD codecs Ben Hutchings 2012-11-14 5:40 ` [ 57/82] hwmon: (w83627ehf) Force initial bank selection Ben Hutchings 2012-11-14 5:40 ` [ 58/82] drm: restore open_count if drm_setup fails Ben Hutchings 2012-11-14 5:40 ` [ 59/82] ALSA: hda - Fix empty DAC filling in patch_via.c Ben Hutchings 2012-11-14 5:40 ` [ 60/82] ALSA: hda - Fix invalid connections in VT1802 codec Ben Hutchings 2012-11-14 5:40 ` [ 61/82] ALSA: hda - Add new codec ALC668 and ALC900 (default name ALC1150) Ben Hutchings 2012-11-14 5:40 ` [ 62/82] ALSA: Fix card refcount unbalance Ben Hutchings 2012-11-14 5:40 ` [ 63/82] xfs: fix reading of wrapped log data Ben Hutchings 2012-11-14 5:40 ` [ 64/82] fanotify: fix missing break Ben Hutchings 2012-11-14 5:40 ` [ 65/82] mm: bugfix: set current->reclaim_state to NULL while returning from kswapd() Ben Hutchings 2012-11-14 5:40 ` [ 66/82] drm/vmwgfx: Fix hibernation device reset Ben Hutchings 2012-11-14 5:40 ` [ 67/82] drm/vmwgfx: Fix a case where the code would BUG when trying to pin GMR memory Ben Hutchings 2012-11-14 5:40 ` [ 68/82] sctp: fix call to SCTP_CMD_PROCESS_SACK in sctp_cmd_interpreter() Ben Hutchings 2012-11-14 5:40 ` [ 69/82] netlink: use kfree_rcu() in netlink_release() Ben Hutchings 2012-11-14 5:40 ` [ 70/82] tcp: fix FIONREAD/SIOCINQ Ben Hutchings 2012-11-14 5:40 ` [ 71/82] ipv6: Set default hoplimit as zero Ben Hutchings 2012-11-14 5:40 ` [ 72/82] net: usb: Fix memory leak on Tx data path Ben Hutchings 2012-11-14 5:40 ` [ 73/82] net: fix divide by zero in tcp algorithm illinois Ben Hutchings 2012-11-14 5:40 ` [ 74/82] l2tp: fix oops in l2tp_eth_create() error path Ben Hutchings 2012-11-14 5:40 ` [ 75/82] af-packet: fix oops when socket is not present Ben Hutchings 2012-11-14 5:40 ` [ 76/82] ipv6: send unsolicited neighbour advertisements to all-nodes Ben Hutchings 2012-11-14 5:40 ` [ 77/82] eCryptfs: Copy up POSIX ACL and read-only flags from lower mount Ben Hutchings 2012-11-14 5:40 ` [ 78/82] eCryptfs: check for eCryptfs cipher support at mount Ben Hutchings 2012-11-14 5:40 ` [ 79/82] r8169: allow multicast packets on sub-8168f chipset Ben Hutchings 2012-11-14 5:40 ` [ 80/82] r8169: Fix WoL on RTL8168d/8111d Ben Hutchings 2012-11-14 5:40 ` [ 81/82] r8169: use unlimited DMA burst for TX Ben Hutchings 2012-11-14 5:40 ` [ 82/82] sky2: Fix for interrupt handler Ben Hutchings 2012-11-14 6:13 ` [ 00/82] 3.2.34-stable review Ben Hutchings
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20121114053936.947604243@decadent.org.uk \ --to=ben@decadent.org.uk \ --cc=akpm@linux-foundation.org \ --cc=alan@lxorguk.ukuu.org.uk \ --cc=gurucharan.shetty@gmail.com \ --cc=herbert@gondor.hengli.com.au \ --cc=jussi.kivilinna@mbnet.fi \ --cc=linux-kernel@vger.kernel.org \ --cc=stable@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.