From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v3,2/5] ACPI / bus: Do not traverse through non-existed device table From: Andy Shevchenko Message-Id: <1518106383.22495.206.camel@linux.intel.com> Date: Thu, 08 Feb 2018 18:13:03 +0200 To: "Rafael J. Wysocki" Cc: dmaengine , "Rafael J . Wysocki" , ACPI Devel Maling List , Mika Westerberg , Sinan Kaya , Sakari Ailus , Vinod Koul List-ID: T24gVGh1LCAyMDE4LTAyLTA4IGF0IDE2OjU5ICswMTAwLCBSYWZhZWwgSi4gV3lzb2NraSB3cm90 ZToKPiBPbiBXZWQsIEZlYiA3LCAyMDE4IGF0IDM6NTYgUE0sIEFuZHkgU2hldmNoZW5rbwo+IDxh bmRyaXkuc2hldmNoZW5rb0BsaW51eC5pbnRlbC5jb20+IHdyb3RlOgo+ID4gV2hlbiBfX2FjcGlf bWF0Y2hfZGV2aWNlKCkgaXMgY2FsbGVkIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGhhdmUKPiA+ IEFDUEkgSUQgdGFibGUgYSBNVUxMIHBvaW50ZXIuIFRvIGF2b2lkIHBvdGVudGlhbCBkZXJlZmVy ZW5jZSwKPiA+IGNoZWNrIGZvciB0aGlzIGJlZm9yZSB0cmF2ZXJzZS4KPiA+IAo+ID4gV2hpbGUg aGVyZSwgcmVtb3ZlIHJlZHVuZGFudCAnZWxzZScuCj4gPiAKPiA+IAoKPiA+ICsgICAgICAgICAg ICAgICBpZiAoaWRzKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGlkID0gaWRz OyBpZC0+aWRbMF0gfHwgaWQtPmNsczsgaWQrKykgewo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoaWQtPmlkWzBdICYmICFzdHJjbXAoKGNoYXIgKilpZC0KPiA+ID5pZCwg aHdpZC0+aWQpKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBpZDsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkLT5jbHMg JiYKPiA+IF9fYWNwaV9tYXRjaF9kZXZpY2VfY2xzKGlkLCBod2lkKSkKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQ7Cj4gPiArICAgICAgICAgICAg ICAgICAgICAgICB9Cj4gPiAKPiAKCj4gVGhlIHJldHVybiB2YWx1ZSBiZWxvdyBzaG91bGQgYmUg dXBkYXRlZCBpbiAqdGhpcyogcGF0Y2gsIGJlY2F1c2UgdGhpcwo+IGlzIHdoYXQgYWxsb3dzIGlk cyB0byBiZSBOVUxMIGluIHRoZSBmaXJzdCBwbGFjZS4KCk9LLCBzbyBJJ2xsIGZvbGQgaXQgaW50 byBwYXRjaCAxIHRoZW4uCgo+IEFuZCBhcyBmYXIgYXMgSSdtIGNvbmNlcm5lZCB5b3UgY2FuIGRv Ogo+IAo+IGlmICghc3RyY21wKEFDUElfRFRfTkFNRVNQQUNFX0hJRCwgaHdpZC0+aWQpCj4gICAg ICAgICByZXR1cm4gKGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZAo+ICopYWNwaV9vZl9tYXRj aF9kZXZpY2UoZGV2aWNlLCBvZl9pZHMpOwo+IAo+IGFuZCB1cGRhdGUgdGhlIGNvbW1lbnQgYWNj b3JkaW5nbHkuCgpCdXQgaXQncyBzdGlsbCBhIHRyaWNrLgoKT2theSwgd2hhdCBjb21lcyB0byBt eSBtaW5kICh5ZXMsIG5vdCBzbyBzaW1wbGUsIGJ1dCBjbGVhbmVyIEkgc3VwcG9zZSkKaXMgdG8g ZGVmaW5lCgpzdHJ1Y3QgYWNwaV9vZl9kZXZpY2VfaWQgewogIHN0cnVjdCBhY3BpX2RldmljZV9p ZCAqYWNwaV9pZDsKICBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKfTsKCkFkZCBhIG5ldyBw YXJhbWV0ZXIgdG8gYWNwaV9vZl9tYXRjaF9kZXZpY2UoLi4uLCBzdHJ1Y3QKYWNwaV9vZl9kZXZp Y2VfaWQgKmlkKS4KCgpVcGRhdGUgX19hY3BpX21hdGNoX2RldmljZSgpIGluIHRoZSBzaW1pbGFy IHdheS4KClVwZGF0ZSBjYWxsZXJzLgoKSXQgbG9va3MgdG8gbWUgbXVjaCBtb3JlIGNsZWFuZXIu Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andy Shevchenko Subject: Re: [PATCH v3 2/5] ACPI / bus: Do not traverse through non-existed device table Date: Thu, 08 Feb 2018 18:13:03 +0200 Message-ID: <1518106383.22495.206.camel@linux.intel.com> References: <20180207145610.88434-1-andriy.shevchenko@linux.intel.com> <20180207145610.88434-2-andriy.shevchenko@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Return-path: Received: from mga04.intel.com ([192.55.52.120]:64257 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750847AbeBHQNG (ORCPT ); Thu, 8 Feb 2018 11:13:06 -0500 In-Reply-To: Sender: linux-acpi-owner@vger.kernel.org List-Id: linux-acpi@vger.kernel.org To: "Rafael J. Wysocki" Cc: dmaengine , "Rafael J . Wysocki" , ACPI Devel Maling List , Mika Westerberg , Sinan Kaya , Sakari Ailus , Vinod Koul On Thu, 2018-02-08 at 16:59 +0100, Rafael J. Wysocki wrote: > On Wed, Feb 7, 2018 at 3:56 PM, Andy Shevchenko > wrote: > > When __acpi_match_device() is called it would be possible to have > > ACPI ID table a MULL pointer. To avoid potential dereference, > > check for this before traverse. > > > > While here, remove redundant 'else'. > > > > > > + if (ids) { > > + for (id = ids; id->id[0] || id->cls; id++) { > > + if (id->id[0] && !strcmp((char *)id- > > >id, hwid->id)) > > + return id; > > + if (id->cls && > > __acpi_match_device_cls(id, hwid)) > > + return id; > > + } > > > > The return value below should be updated in *this* patch, because this > is what allows ids to be NULL in the first place. OK, so I'll fold it into patch 1 then. > And as far as I'm concerned you can do: > > if (!strcmp(ACPI_DT_NAMESPACE_HID, hwid->id) > return (const struct acpi_device_id > *)acpi_of_match_device(device, of_ids); > > and update the comment accordingly. But it's still a trick. Okay, what comes to my mind (yes, not so simple, but cleaner I suppose) is to define struct acpi_of_device_id { struct acpi_device_id *acpi_id; struct of_device_id *of_id; }; Add a new parameter to acpi_of_match_device(..., struct acpi_of_device_id *id). Update __acpi_match_device() in the similar way. Update callers. It looks to me much more cleaner. -- Andy Shevchenko Intel Finland Oy