From mboxrd@z Thu Jan 1 00:00:00 1970 From: Elena Reshetova Subject: [PATCH 15/29] drivers, media: convert vb2_dma_sg_buf.refcount from atomic_t to refcount_t Date: Mon, 6 Mar 2017 16:21:02 +0200 Message-ID: <1488810076-3754-16-git-send-email-elena.reshetova@intel.com> References: <1488810076-3754-1-git-send-email-elena.reshetova@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1488810076-3754-1-git-send-email-elena.reshetova@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: gregkh@linuxfoundation.org Cc: peterz@infradead.org, linux-pci@vger.kernel.org, target-devel@vger.kernel.org, linux1394-devel@lists.sourceforge.net, Elena Reshetova , devel@driverdev.osuosl.org, linux-s390@vger.kernel.org, linux-scsi@vger.kernel.org, linux-serial@vger.kernel.org, fcoe-devel@open-fcoe.org, xen-devel@lists.xenproject.org, open-iscsi@googlegroups.com, linux-media@vger.kernel.org, Kees Cook , linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, Hans Liljestrand , David Windsor , netdev@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, devel@linuxdriverproject.org List-Id: linux-raid.ids cmVmY291bnRfdCB0eXBlIGFuZCBjb3JyZXNwb25kaW5nIEFQSSBzaG91bGQgYmUKdXNlZCBpbnN0 ZWFkIG9mIGF0b21pY190IHdoZW4gdGhlIHZhcmlhYmxlIGlzIHVzZWQgYXMKYSByZWZlcmVuY2Ug Y291bnRlci4gVGhpcyBhbGxvd3MgdG8gYXZvaWQgYWNjaWRlbnRhbApyZWZjb3VudGVyIG92ZXJm bG93cyB0aGF0IG1pZ2h0IGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUKc2l0dWF0aW9ucy4KClNpZ25l ZC1vZmYtYnk6IEVsZW5hIFJlc2hldG92YSA8ZWxlbmEucmVzaGV0b3ZhQGludGVsLmNvbT4KU2ln bmVkLW9mZi1ieTogSGFucyBMaWxqZXN0cmFuZCA8aXNoa2FtaWVsQGdtYWlsLmNvbT4KU2lnbmVk LW9mZi1ieTogS2VlcyBDb29rIDxrZWVzY29va0BjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6 IERhdmlkIFdpbmRzb3IgPGR3aW5kc29yQGdtYWlsLmNvbT4KLS0tCiBkcml2ZXJzL21lZGlhL3Y0 bDItY29yZS92aWRlb2J1ZjItZG1hLXNnLmMgfCAxMSArKysrKystLS0tLQogMSBmaWxlIGNoYW5n ZWQsIDYgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJz L21lZGlhL3Y0bDItY29yZS92aWRlb2J1ZjItZG1hLXNnLmMgYi9kcml2ZXJzL21lZGlhL3Y0bDIt Y29yZS92aWRlb2J1ZjItZG1hLXNnLmMKaW5kZXggZWNmZjhmNC4uMjlmZGUxYSAxMDA2NDQKLS0t IGEvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdmlkZW9idWYyLWRtYS1zZy5jCisrKyBiL2RyaXZl cnMvbWVkaWEvdjRsMi1jb3JlL3ZpZGVvYnVmMi1kbWEtc2cuYwpAQCAtMTIsNiArMTIsNyBAQAog CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNs dWRlIDxsaW51eC9yZWZjb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAj aW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC00Niw3 ICs0Nyw3IEBAIHN0cnVjdCB2YjJfZG1hX3NnX2J1ZiB7CiAJc3RydWN0IHNnX3RhYmxlCQkJKmRt YV9zZ3Q7CiAJc2l6ZV90CQkJCXNpemU7CiAJdW5zaWduZWQgaW50CQkJbnVtX3BhZ2VzOwotCWF0 b21pY190CQkJcmVmY291bnQ7CisJcmVmY291bnRfdAkJCXJlZmNvdW50OwogCXN0cnVjdCB2YjJf dm1hcmVhX2hhbmRsZXIJaGFuZGxlcjsKIAogCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQJKmRi X2F0dGFjaDsKQEAgLTE1MCw3ICsxNTEsNyBAQCBzdGF0aWMgdm9pZCAqdmIyX2RtYV9zZ19hbGxv YyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZG1hX2F0dHJzLAogCWJ1Zi0+aGFu ZGxlci5wdXQgPSB2YjJfZG1hX3NnX3B1dDsKIAlidWYtPmhhbmRsZXIuYXJnID0gYnVmOwogCi0J YXRvbWljX2luYygmYnVmLT5yZWZjb3VudCk7CisJcmVmY291bnRfc2V0KCZidWYtPnJlZmNvdW50 LCAxKTsKIAogCWRwcmludGsoMSwgIiVzOiBBbGxvY2F0ZWQgYnVmZmVyIG9mICVkIHBhZ2VzXG4i LAogCQlfX2Z1bmNfXywgYnVmLT5udW1fcGFnZXMpOwpAQCAtMTc2LDcgKzE3Nyw3IEBAIHN0YXRp YyB2b2lkIHZiMl9kbWFfc2dfcHV0KHZvaWQgKmJ1Zl9wcml2KQogCXN0cnVjdCBzZ190YWJsZSAq c2d0ID0gJmJ1Zi0+c2dfdGFibGU7CiAJaW50IGkgPSBidWYtPm51bV9wYWdlczsKIAotCWlmIChh dG9taWNfZGVjX2FuZF90ZXN0KCZidWYtPnJlZmNvdW50KSkgeworCWlmIChyZWZjb3VudF9kZWNf YW5kX3Rlc3QoJmJ1Zi0+cmVmY291bnQpKSB7CiAJCWRwcmludGsoMSwgIiVzOiBGcmVlaW5nIGJ1 ZmZlciBvZiAlZCBwYWdlc1xuIiwgX19mdW5jX18sCiAJCQlidWYtPm51bV9wYWdlcyk7CiAJCWRt YV91bm1hcF9zZ19hdHRycyhidWYtPmRldiwgc2d0LT5zZ2wsIHNndC0+b3JpZ19uZW50cywKQEAg LTMyMCw3ICszMjEsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHZiMl9kbWFfc2dfbnVtX3VzZXJz KHZvaWQgKmJ1Zl9wcml2KQogewogCXN0cnVjdCB2YjJfZG1hX3NnX2J1ZiAqYnVmID0gYnVmX3By aXY7CiAKLQlyZXR1cm4gYXRvbWljX3JlYWQoJmJ1Zi0+cmVmY291bnQpOworCXJldHVybiByZWZj b3VudF9yZWFkKCZidWYtPnJlZmNvdW50KTsKIH0KIAogc3RhdGljIGludCB2YjJfZG1hX3NnX21t YXAodm9pZCAqYnVmX3ByaXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQpAQCAtNTMwLDcg KzUzMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZG1hX2J1ZiAqdmIyX2RtYV9zZ19nZXRfZG1hYnVmKHZv aWQgKmJ1Zl9wcml2LCB1bnNpZ25lZCBsb25nIGZsYWdzCiAJCXJldHVybiBOVUxMOwogCiAJLyog ZG1hYnVmIGtlZXBzIHJlZmVyZW5jZSB0byB2YjIgYnVmZmVyICovCi0JYXRvbWljX2luYygmYnVm LT5yZWZjb3VudCk7CisJcmVmY291bnRfaW5jKCZidWYtPnJlZmNvdW50KTsKIAogCXJldHVybiBk YnVmOwogfQotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3Jn Cmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932498AbdCFOgR (ORCPT ); Mon, 6 Mar 2017 09:36:17 -0500 Received: from mga14.intel.com ([192.55.52.115]:31965 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754732AbdCFOgD (ORCPT ); Mon, 6 Mar 2017 09:36:03 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.35,254,1484035200"; d="scan'208";a="72746236" From: Elena Reshetova To: gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org, netdev@vger.kernel.org, linux1394-devel@lists.sourceforge.net, linux-bcache@vger.kernel.org, linux-raid@vger.kernel.org, linux-media@vger.kernel.org, devel@linuxdriverproject.org, linux-pci@vger.kernel.org, linux-s390@vger.kernel.org, fcoe-devel@open-fcoe.org, linux-scsi@vger.kernel.org, open-iscsi@googlegroups.com, devel@driverdev.osuosl.org, target-devel@vger.kernel.org, linux-serial@vger.kernel.org, linux-usb@vger.kernel.org, peterz@infradead.org, Elena Reshetova , Hans Liljestrand , Kees Cook , David Windsor Subject: [PATCH 15/29] drivers, media: convert vb2_dma_sg_buf.refcount from atomic_t to refcount_t Date: Mon, 6 Mar 2017 16:21:02 +0200 Message-Id: <1488810076-3754-16-git-send-email-elena.reshetova@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1488810076-3754-1-git-send-email-elena.reshetova@intel.com> References: <1488810076-3754-1-git-send-email-elena.reshetova@intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 Signed-off-by: Hans Liljestrand Signed-off-by: Kees Cook Signed-off-by: David Windsor --- drivers/media/v4l2-core/videobuf2-dma-sg.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/media/v4l2-core/videobuf2-dma-sg.c b/drivers/media/v4l2-core/videobuf2-dma-sg.c index ecff8f4..29fde1a 100644 --- a/drivers/media/v4l2-core/videobuf2-dma-sg.c +++ b/drivers/media/v4l2-core/videobuf2-dma-sg.c @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -46,7 +47,7 @@ struct vb2_dma_sg_buf { struct sg_table *dma_sgt; size_t size; unsigned int num_pages; - atomic_t refcount; + refcount_t refcount; struct vb2_vmarea_handler handler; struct dma_buf_attachment *db_attach; @@ -150,7 +151,7 @@ static void *vb2_dma_sg_alloc(struct device *dev, unsigned long dma_attrs, buf->handler.put = vb2_dma_sg_put; buf->handler.arg = buf; - atomic_inc(&buf->refcount); + refcount_set(&buf->refcount, 1); dprintk(1, "%s: Allocated buffer of %d pages\n", __func__, buf->num_pages); @@ -176,7 +177,7 @@ static void vb2_dma_sg_put(void *buf_priv) struct sg_table *sgt = &buf->sg_table; int i = buf->num_pages; - if (atomic_dec_and_test(&buf->refcount)) { + if (refcount_dec_and_test(&buf->refcount)) { dprintk(1, "%s: Freeing buffer of %d pages\n", __func__, buf->num_pages); dma_unmap_sg_attrs(buf->dev, sgt->sgl, sgt->orig_nents, @@ -320,7 +321,7 @@ static unsigned int vb2_dma_sg_num_users(void *buf_priv) { struct vb2_dma_sg_buf *buf = buf_priv; - return atomic_read(&buf->refcount); + return refcount_read(&buf->refcount); } static int vb2_dma_sg_mmap(void *buf_priv, struct vm_area_struct *vma) @@ -530,7 +531,7 @@ static struct dma_buf *vb2_dma_sg_get_dmabuf(void *buf_priv, unsigned long flags return NULL; /* dmabuf keeps reference to vb2 buffer */ - atomic_inc(&buf->refcount); + refcount_inc(&buf->refcount); return dbuf; } -- 2.7.4