lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Mon, 6 Mar 2017 16:21:07 +0200 From: Elena Reshetova <elena.reshetova@...el.com> To: gregkh@...uxfoundation.org Cc: linux-kernel@...r.kernel.org, xen-devel@...ts.xenproject.org, netdev@...r.kernel.org, linux1394-devel@...ts.sourceforge.net, linux-bcache@...r.kernel.org, linux-raid@...r.kernel.org, linux-media@...r.kernel.org, devel@...uxdriverproject.org, linux-pci@...r.kernel.org, linux-s390@...r.kernel.org, fcoe-devel@...n-fcoe.org, linux-scsi@...r.kernel.org, open-iscsi@...glegroups.com, devel@...verdev.osuosl.org, target-devel@...r.kernel.org, linux-serial@...r.kernel.org, linux-usb@...r.kernel.org, peterz@...radead.org, Elena Reshetova <elena.reshetova@...el.com>, Hans Liljestrand <ishkamiel@...il.com>, Kees Cook <keescook@...omium.org>, David Windsor <dwindsor@...il.com> Subject: [PATCH 20/29] drivers, s390: convert qeth_reply.refcnt from atomic_t to refcount_t refcount_t type and corresponding API should be used instead of atomic_t when the variable is used as a reference counter. This allows to avoid accidental refcounter overflows that might lead to use-after-free situations. Signed-off-by: Elena Reshetova <elena.reshetova@...el.com> Signed-off-by: Hans Liljestrand <ishkamiel@...il.com> Signed-off-by: Kees Cook <keescook@...omium.org> Signed-off-by: David Windsor <dwindsor@...il.com> --- drivers/s390/net/qeth_core.h | 3 ++- drivers/s390/net/qeth_core_main.c | 8 +++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h index e7addea..e2c81d21 100644 --- a/drivers/s390/net/qeth_core.h +++ b/drivers/s390/net/qeth_core.h @@ -20,6 +20,7 @@ #include <linux/ethtool.h> #include <linux/hashtable.h> #include <linux/ip.h> +#include <linux/refcount.h> #include <net/ipv6.h> #include <net/if_inet6.h> @@ -641,7 +642,7 @@ struct qeth_reply { int rc; void *param; struct qeth_card *card; - atomic_t refcnt; + refcount_t refcnt; }; diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c index 315d8a2..a2bf13f 100644 --- a/drivers/s390/net/qeth_core_main.c +++ b/drivers/s390/net/qeth_core_main.c @@ -555,7 +555,7 @@ static struct qeth_reply *qeth_alloc_reply(struct qeth_card *card) reply = kzalloc(sizeof(struct qeth_reply), GFP_ATOMIC); if (reply) { - atomic_set(&reply->refcnt, 1); + refcount_set(&reply->refcnt, 1); atomic_set(&reply->received, 0); reply->card = card; } @@ -564,14 +564,12 @@ static struct qeth_reply *qeth_alloc_reply(struct qeth_card *card) static void qeth_get_reply(struct qeth_reply *reply) { - WARN_ON(atomic_read(&reply->refcnt) <= 0); - atomic_inc(&reply->refcnt); + refcount_inc(&reply->refcnt); } static void qeth_put_reply(struct qeth_reply *reply) { - WARN_ON(atomic_read(&reply->refcnt) <= 0); - if (atomic_dec_and_test(&reply->refcnt)) + if (refcount_dec_and_test(&reply->refcnt)) kfree(reply); } -- 2.7.4
Powered by blists - more mailing lists