From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dan Carpenter Date: Thu, 11 Jun 2015 15:19:02 +0000 Subject: [patch] drm/amdkfd: fix some range checks in address watch ioctl Message-Id: <20150611151902.GF12192@mwanda> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Oded Gabbay , Yair Shachar Cc: kernel-janitors@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org ->buf_size_in_bytes must be large enough to hold ->num_watch_points and ->watch_mode so I have added a sizeof(int) * 2 to the minimum size. Also we have to subtract sizeof(*args) from the max args_idx limit so that it matches the allocation. Also I changed a > to >= for the last compare. I moved the if (aw_info.num_watch_points > MAX_WATCH_ADDRESSES) { check here so that we don't get an integer overflow on 32bit systems. It's harmless because we would have caught it later but it causes a static checker warning. I had to add a new include to get the MAX_WATCH_ADDRESSES define. Signed-off-by: Dan Carpenter --- I feel like this patch is probably not going to be merged without changes. Also we seem to set ->watch_address to the last address in the buffer instead of the first? It is very strange. I am going on vacation so I will be offline for a week. Yair, if this patch isn't right then feel free to fix it and give me a Reported-by tag. Otherwise, I will see everyone on the flip side. :) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c index 96c904b..54a608a 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c @@ -36,6 +36,7 @@ #include "kfd_priv.h" #include "kfd_device_queue_manager.h" #include "kfd_dbgmgr.h" +#include "../../radeon/cik_reg.h" static long kfd_ioctl(struct file *, unsigned int, unsigned long); static int kfd_open(struct inode *, struct file *); @@ -553,7 +554,7 @@ static int kfd_ioctl_dbg_address_watch(struct file *filep, /* Validate arguments */ if ((args->buf_size_in_bytes > MAX_ALLOWED_AW_BUFF_SIZE) || - (args->buf_size_in_bytes <= sizeof(*args)) || + (args->buf_size_in_bytes <= sizeof(*args) + sizeof(int) * 2) || (cmd_from_user = NULL)) return -EINVAL; @@ -576,6 +577,11 @@ static int kfd_ioctl_dbg_address_watch(struct file *filep, aw_info.process = p; aw_info.num_watch_points = *((uint32_t *)(&args_buff[args_idx])); + if (aw_info.num_watch_points = 0 || + aw_info.num_watch_points > MAX_WATCH_ADDRESSES) { + kfree(args_buff); + return -EINVAL; + } args_idx += sizeof(aw_info.num_watch_points); aw_info.watch_mode = (enum HSA_DBG_WATCH_MODE *) &args_buff[args_idx]; @@ -590,7 +596,7 @@ static int kfd_ioctl_dbg_address_watch(struct file *filep, /* skip over the addresses buffer */ args_idx += sizeof(aw_info.watch_address) * aw_info.num_watch_points; - if (args_idx >= args->buf_size_in_bytes) { + if (args_idx >= args->buf_size_in_bytes - sizeof(*args)) { kfree(args_buff); return -EINVAL; } @@ -614,7 +620,7 @@ static int kfd_ioctl_dbg_address_watch(struct file *filep, args_idx += sizeof(aw_info.watch_mask); } - if (args_idx > args->buf_size_in_bytes) { + if (args_idx >= args->buf_size_in_bytes - sizeof(args)) { kfree(args_buff); return -EINVAL; } diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c b/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c index 96153f2..d366757 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c @@ -301,12 +301,6 @@ static int dbgdev_address_watch_nodiq(struct kfd_dbgdev *dbgdev, addrLo.u32All = 0; cntl.u32All = 0; - if ((adw_info->num_watch_points > MAX_WATCH_ADDRESSES) || - (adw_info->num_watch_points = 0)) { - pr_err("amdkfd: num_watch_points is invalid\n"); - return -EINVAL; - } - if ((adw_info->watch_mode = NULL) || (adw_info->watch_address = NULL)) { pr_err("amdkfd: adw_info fields are not valid\n"); @@ -369,12 +363,6 @@ static int dbgdev_address_watch_diq(struct kfd_dbgdev *dbgdev, addrLo.u32All = 0; cntl.u32All = 0; - if ((adw_info->num_watch_points > MAX_WATCH_ADDRESSES) || - (adw_info->num_watch_points = 0)) { - pr_err("amdkfd: num_watch_points is invalid\n"); - return -EINVAL; - } - if ((NULL = adw_info->watch_mode) || (NULL = adw_info->watch_address)) { pr_err("amdkfd: adw_info fields are not valid\n"); From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dan Carpenter Subject: [patch] drm/amdkfd: fix some range checks in address watch ioctl Date: Thu, 11 Jun 2015 18:19:02 +0300 Message-ID: <20150611151902.GF12192@mwanda> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by gabe.freedesktop.org (Postfix) with ESMTP id 21CA06E4DF for ; Thu, 11 Jun 2015 08:19:24 -0700 (PDT) Content-Disposition: inline List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Oded Gabbay , Yair Shachar Cc: kernel-janitors@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org LT5idWZfc2l6ZV9pbl9ieXRlcyBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIC0+bnVtX3dh dGNoX3BvaW50cyBhbmQKLT53YXRjaF9tb2RlIHNvIEkgaGF2ZSBhZGRlZCBhIHNpemVvZihpbnQp ICogMiB0byB0aGUgbWluaW11bSBzaXplLgoKQWxzbyB3ZSBoYXZlIHRvIHN1YnRyYWN0IHNpemVv ZigqYXJncykgZnJvbSB0aGUgbWF4IGFyZ3NfaWR4IGxpbWl0IHNvCnRoYXQgaXQgbWF0Y2hlcyB0 aGUgYWxsb2NhdGlvbi4gIEFsc28gSSBjaGFuZ2VkIGEgPiB0byA+PSBmb3IgdGhlIGxhc3QKY29t cGFyZS4KCkkgbW92ZWQgdGhlIGlmIChhd19pbmZvLm51bV93YXRjaF9wb2ludHMgPiBNQVhfV0FU Q0hfQUREUkVTU0VTKSB7IGNoZWNrCmhlcmUgc28gdGhhdCB3ZSBkb24ndCBnZXQgYW4gaW50ZWdl ciBvdmVyZmxvdyBvbiAzMmJpdCBzeXN0ZW1zLiAgSXQncwpoYXJtbGVzcyBiZWNhdXNlIHdlIHdv dWxkIGhhdmUgY2F1Z2h0IGl0IGxhdGVyIGJ1dCBpdCBjYXVzZXMgYSBzdGF0aWMKY2hlY2tlciB3 YXJuaW5nLiAgSSBoYWQgdG8gYWRkIGEgbmV3IGluY2x1ZGUgdG8gZ2V0IHRoZQpNQVhfV0FUQ0hf QUREUkVTU0VTIGRlZmluZS4KClNpZ25lZC1vZmYtYnk6IERhbiBDYXJwZW50ZXIgPGRhbi5jYXJw ZW50ZXJAb3JhY2xlLmNvbT4KLS0tCkkgZmVlbCBsaWtlIHRoaXMgcGF0Y2ggaXMgcHJvYmFibHkg bm90IGdvaW5nIHRvIGJlIG1lcmdlZCB3aXRob3V0CmNoYW5nZXMuICBBbHNvIHdlIHNlZW0gdG8g c2V0IC0+d2F0Y2hfYWRkcmVzcyB0byB0aGUgbGFzdCBhZGRyZXNzIGluIHRoZQpidWZmZXIgaW5z dGVhZCBvZiB0aGUgZmlyc3Q/ICBJdCBpcyB2ZXJ5IHN0cmFuZ2UuICBJIGFtIGdvaW5nIG9uCnZh Y2F0aW9uIHNvIEkgd2lsbCBiZSBvZmZsaW5lIGZvciBhIHdlZWsuICBZYWlyLCBpZiB0aGlzIHBh dGNoIGlzbid0CnJpZ2h0IHRoZW4gZmVlbCBmcmVlIHRvIGZpeCBpdCBhbmQgZ2l2ZSBtZSBhIFJl cG9ydGVkLWJ5IHRhZy4KCk90aGVyd2lzZSwgSSB3aWxsIHNlZSBldmVyeW9uZSBvbiB0aGUgZmxp cCBzaWRlLiAgOikKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRf Y2hhcmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYwppbmRl eCA5NmM5MDRiLi41NGE2MDhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtm ZC9rZmRfY2hhcmRldi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9jaGFy ZGV2LmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJrZmRfcHJpdi5oIgogI2luY2x1ZGUg ImtmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5oIgogI2luY2x1ZGUgImtmZF9kYmdtZ3IuaCIKKyNp bmNsdWRlICIuLi8uLi9yYWRlb24vY2lrX3JlZy5oIgogCiBzdGF0aWMgbG9uZyBrZmRfaW9jdGwo c3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyBpbnQg a2ZkX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwpAQCAtNTUzLDcgKzU1NCw3 IEBAIHN0YXRpYyBpbnQga2ZkX2lvY3RsX2RiZ19hZGRyZXNzX3dhdGNoKHN0cnVjdCBmaWxlICpm aWxlcCwKIAkvKiBWYWxpZGF0ZSBhcmd1bWVudHMgKi8KIAogCWlmICgoYXJncy0+YnVmX3NpemVf aW5fYnl0ZXMgPiBNQVhfQUxMT1dFRF9BV19CVUZGX1NJWkUpIHx8Ci0JCShhcmdzLT5idWZfc2l6 ZV9pbl9ieXRlcyA8PSBzaXplb2YoKmFyZ3MpKSB8fAorCQkoYXJncy0+YnVmX3NpemVfaW5fYnl0 ZXMgPD0gc2l6ZW9mKCphcmdzKSArIHNpemVvZihpbnQpICogMikgfHwKIAkJKGNtZF9mcm9tX3Vz ZXIgPT0gTlVMTCkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC01NzYsNiArNTc3LDExIEBAIHN0 YXRpYyBpbnQga2ZkX2lvY3RsX2RiZ19hZGRyZXNzX3dhdGNoKHN0cnVjdCBmaWxlICpmaWxlcCwK IAlhd19pbmZvLnByb2Nlc3MgPSBwOwogCiAJYXdfaW5mby5udW1fd2F0Y2hfcG9pbnRzID0gKigo dWludDMyX3QgKikoJmFyZ3NfYnVmZlthcmdzX2lkeF0pKTsKKwlpZiAoYXdfaW5mby5udW1fd2F0 Y2hfcG9pbnRzID09IDAgfHwKKwkgICAgYXdfaW5mby5udW1fd2F0Y2hfcG9pbnRzID4gTUFYX1dB VENIX0FERFJFU1NFUykgeworCQlrZnJlZShhcmdzX2J1ZmYpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CiAJYXJnc19pZHggKz0gc2l6ZW9mKGF3X2luZm8ubnVtX3dhdGNoX3BvaW50cyk7CiAKIAlh d19pbmZvLndhdGNoX21vZGUgPSAoZW51bSBIU0FfREJHX1dBVENIX01PREUgKikgJmFyZ3NfYnVm ZlthcmdzX2lkeF07CkBAIC01OTAsNyArNTk2LDcgQEAgc3RhdGljIGludCBrZmRfaW9jdGxfZGJn X2FkZHJlc3Nfd2F0Y2goc3RydWN0IGZpbGUgKmZpbGVwLAogCS8qIHNraXAgb3ZlciB0aGUgYWRk cmVzc2VzIGJ1ZmZlciAqLwogCWFyZ3NfaWR4ICs9IHNpemVvZihhd19pbmZvLndhdGNoX2FkZHJl c3MpICogYXdfaW5mby5udW1fd2F0Y2hfcG9pbnRzOwogCi0JaWYgKGFyZ3NfaWR4ID49IGFyZ3Mt PmJ1Zl9zaXplX2luX2J5dGVzKSB7CisJaWYgKGFyZ3NfaWR4ID49IGFyZ3MtPmJ1Zl9zaXplX2lu X2J5dGVzIC0gc2l6ZW9mKCphcmdzKSkgewogCQlrZnJlZShhcmdzX2J1ZmYpOwogCQlyZXR1cm4g LUVJTlZBTDsKIAl9CkBAIC02MTQsNyArNjIwLDcgQEAgc3RhdGljIGludCBrZmRfaW9jdGxfZGJn X2FkZHJlc3Nfd2F0Y2goc3RydWN0IGZpbGUgKmZpbGVwLAogCQlhcmdzX2lkeCArPSBzaXplb2Yo YXdfaW5mby53YXRjaF9tYXNrKTsKIAl9CiAKLQlpZiAoYXJnc19pZHggPiBhcmdzLT5idWZfc2l6 ZV9pbl9ieXRlcykgeworCWlmIChhcmdzX2lkeCA+PSBhcmdzLT5idWZfc2l6ZV9pbl9ieXRlcyAt IHNpemVvZihhcmdzKSkgewogCQlrZnJlZShhcmdzX2J1ZmYpOwogCQlyZXR1cm4gLUVJTlZBTDsK IAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGJnZGV2LmMg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGJnZGV2LmMKaW5kZXggOTYxNTNmMi4u ZDM2Njc1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RiZ2Rl di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kYmdkZXYuYwpAQCAtMzAx LDEyICszMDEsNiBAQCBzdGF0aWMgaW50IGRiZ2Rldl9hZGRyZXNzX3dhdGNoX25vZGlxKHN0cnVj dCBrZmRfZGJnZGV2ICpkYmdkZXYsCiAJYWRkckxvLnUzMkFsbCA9IDA7CiAJY250bC51MzJBbGwg PSAwOwogCi0JaWYgKChhZHdfaW5mby0+bnVtX3dhdGNoX3BvaW50cyA+IE1BWF9XQVRDSF9BRERS RVNTRVMpIHx8Ci0JCQkoYWR3X2luZm8tPm51bV93YXRjaF9wb2ludHMgPT0gMCkpIHsKLQkJcHJf ZXJyKCJhbWRrZmQ6IG51bV93YXRjaF9wb2ludHMgaXMgaW52YWxpZFxuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQogCWlmICgoYWR3X2luZm8tPndhdGNoX21vZGUgPT0gTlVMTCkgfHwKIAkJ KGFkd19pbmZvLT53YXRjaF9hZGRyZXNzID09IE5VTEwpKSB7CiAJCXByX2VycigiYW1ka2ZkOiBh ZHdfaW5mbyBmaWVsZHMgYXJlIG5vdCB2YWxpZFxuIik7CkBAIC0zNjksMTIgKzM2Myw2IEBAIHN0 YXRpYyBpbnQgZGJnZGV2X2FkZHJlc3Nfd2F0Y2hfZGlxKHN0cnVjdCBrZmRfZGJnZGV2ICpkYmdk ZXYsCiAJYWRkckxvLnUzMkFsbCA9IDA7CiAJY250bC51MzJBbGwgPSAwOwogCi0JaWYgKChhZHdf aW5mby0+bnVtX3dhdGNoX3BvaW50cyA+IE1BWF9XQVRDSF9BRERSRVNTRVMpIHx8Ci0JCQkoYWR3 X2luZm8tPm51bV93YXRjaF9wb2ludHMgPT0gMCkpIHsKLQkJcHJfZXJyKCJhbWRrZmQ6IG51bV93 YXRjaF9wb2ludHMgaXMgaW52YWxpZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWlm ICgoTlVMTCA9PSBhZHdfaW5mby0+d2F0Y2hfbW9kZSkgfHwKIAkJCShOVUxMID09IGFkd19pbmZv LT53YXRjaF9hZGRyZXNzKSkgewogCQlwcl9lcnIoImFtZGtmZDogYWR3X2luZm8gZmllbGRzIGFy ZSBub3QgdmFsaWRcbiIpOwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752753AbbFKPT3 (ORCPT ); Thu, 11 Jun 2015 11:19:29 -0400 Received: from userp1040.oracle.com ([156.151.31.81]:30030 "EHLO userp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751656AbbFKPTZ (ORCPT ); Thu, 11 Jun 2015 11:19:25 -0400 Date: Thu, 11 Jun 2015 18:19:02 +0300 From: Dan Carpenter To: Oded Gabbay , Yair Shachar Cc: David Airlie , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org Subject: [patch] drm/amdkfd: fix some range checks in address watch ioctl Message-ID: <20150611151902.GF12192@mwanda> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-Source-IP: userv0021.oracle.com [156.151.31.71] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ->buf_size_in_bytes must be large enough to hold ->num_watch_points and ->watch_mode so I have added a sizeof(int) * 2 to the minimum size. Also we have to subtract sizeof(*args) from the max args_idx limit so that it matches the allocation. Also I changed a > to >= for the last compare. I moved the if (aw_info.num_watch_points > MAX_WATCH_ADDRESSES) { check here so that we don't get an integer overflow on 32bit systems. It's harmless because we would have caught it later but it causes a static checker warning. I had to add a new include to get the MAX_WATCH_ADDRESSES define. Signed-off-by: Dan Carpenter --- I feel like this patch is probably not going to be merged without changes. Also we seem to set ->watch_address to the last address in the buffer instead of the first? It is very strange. I am going on vacation so I will be offline for a week. Yair, if this patch isn't right then feel free to fix it and give me a Reported-by tag. Otherwise, I will see everyone on the flip side. :) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c index 96c904b..54a608a 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c @@ -36,6 +36,7 @@ #include "kfd_priv.h" #include "kfd_device_queue_manager.h" #include "kfd_dbgmgr.h" +#include "../../radeon/cik_reg.h" static long kfd_ioctl(struct file *, unsigned int, unsigned long); static int kfd_open(struct inode *, struct file *); @@ -553,7 +554,7 @@ static int kfd_ioctl_dbg_address_watch(struct file *filep, /* Validate arguments */ if ((args->buf_size_in_bytes > MAX_ALLOWED_AW_BUFF_SIZE) || - (args->buf_size_in_bytes <= sizeof(*args)) || + (args->buf_size_in_bytes <= sizeof(*args) + sizeof(int) * 2) || (cmd_from_user == NULL)) return -EINVAL; @@ -576,6 +577,11 @@ static int kfd_ioctl_dbg_address_watch(struct file *filep, aw_info.process = p; aw_info.num_watch_points = *((uint32_t *)(&args_buff[args_idx])); + if (aw_info.num_watch_points == 0 || + aw_info.num_watch_points > MAX_WATCH_ADDRESSES) { + kfree(args_buff); + return -EINVAL; + } args_idx += sizeof(aw_info.num_watch_points); aw_info.watch_mode = (enum HSA_DBG_WATCH_MODE *) &args_buff[args_idx]; @@ -590,7 +596,7 @@ static int kfd_ioctl_dbg_address_watch(struct file *filep, /* skip over the addresses buffer */ args_idx += sizeof(aw_info.watch_address) * aw_info.num_watch_points; - if (args_idx >= args->buf_size_in_bytes) { + if (args_idx >= args->buf_size_in_bytes - sizeof(*args)) { kfree(args_buff); return -EINVAL; } @@ -614,7 +620,7 @@ static int kfd_ioctl_dbg_address_watch(struct file *filep, args_idx += sizeof(aw_info.watch_mask); } - if (args_idx > args->buf_size_in_bytes) { + if (args_idx >= args->buf_size_in_bytes - sizeof(args)) { kfree(args_buff); return -EINVAL; } diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c b/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c index 96153f2..d366757 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c @@ -301,12 +301,6 @@ static int dbgdev_address_watch_nodiq(struct kfd_dbgdev *dbgdev, addrLo.u32All = 0; cntl.u32All = 0; - if ((adw_info->num_watch_points > MAX_WATCH_ADDRESSES) || - (adw_info->num_watch_points == 0)) { - pr_err("amdkfd: num_watch_points is invalid\n"); - return -EINVAL; - } - if ((adw_info->watch_mode == NULL) || (adw_info->watch_address == NULL)) { pr_err("amdkfd: adw_info fields are not valid\n"); @@ -369,12 +363,6 @@ static int dbgdev_address_watch_diq(struct kfd_dbgdev *dbgdev, addrLo.u32All = 0; cntl.u32All = 0; - if ((adw_info->num_watch_points > MAX_WATCH_ADDRESSES) || - (adw_info->num_watch_points == 0)) { - pr_err("amdkfd: num_watch_points is invalid\n"); - return -EINVAL; - } - if ((NULL == adw_info->watch_mode) || (NULL == adw_info->watch_address)) { pr_err("amdkfd: adw_info fields are not valid\n");