Message ID | 1380732056-5387-1-git-send-email-dh.herrmann@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 18:40 Wed 02 Oct , David Herrmann wrote: > The dmi_list array is initialized using gnu designated initializers, and > therefore may contain fewer explicitly defined entries as there are > elements in it. This is because the enum above with M_xyz constants > contains more items than the designated initializer. Those elements not > explicitly initialized are implicitly set to 0. > > Now efifb_setup() loops through all these array elements, and performs > a strcmp on each item. For non explicitly initialized elements this will > be a null pointer: > > This patch swaps the check order in the if statement, thus checks first > whether dmi_list[i].base is null. > > Signed-off-by: James Bates <james.h.bates@yahoo.com> > Signed-off-by: David Herrmann <dh.herrmann@gmail.com> with the simpleDRM arriving next merge I'm wondering if we need to keep it? Best Regaards, J. > --- > Hi > > As James didn't respond to the last emails, I just rebased the patch and resent > it. The efi M_xyz constants were moved to x86-sysfb so if anyone wants to remove > unused bits, please send a separate patch to LKML and x86-ML. This patch just > fixes the NULL-deref. > > Thanks > David > > drivers/video/efifb.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/video/efifb.c b/drivers/video/efifb.c > index 7f9ff75..fcb9500 100644 > --- a/drivers/video/efifb.c > +++ b/drivers/video/efifb.c > @@ -108,8 +108,8 @@ static int efifb_setup(char *options) > if (!*this_opt) continue; > > for (i = 0; i < M_UNKNOWN; i++) { > - if (!strcmp(this_opt, efifb_dmi_list[i].optname) && > - efifb_dmi_list[i].base != 0) { > + if (efifb_dmi_list[i].base != 0 && > + !strcmp(this_opt, efifb_dmi_list[i].optname)) { > screen_info.lfb_base = efifb_dmi_list[i].base; > screen_info.lfb_linelength = efifb_dmi_list[i].stride; > screen_info.lfb_width = efifb_dmi_list[i].width; > -- > 1.8.4 > -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi On Thu, Oct 31, 2013 at 11:45 AM, Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> wrote: > On 18:40 Wed 02 Oct , David Herrmann wrote: >> The dmi_list array is initialized using gnu designated initializers, and >> therefore may contain fewer explicitly defined entries as there are >> elements in it. This is because the enum above with M_xyz constants >> contains more items than the designated initializer. Those elements not >> explicitly initialized are implicitly set to 0. >> >> Now efifb_setup() loops through all these array elements, and performs >> a strcmp on each item. For non explicitly initialized elements this will >> be a null pointer: >> >> This patch swaps the check order in the if statement, thus checks first >> whether dmi_list[i].base is null. >> >> Signed-off-by: James Bates <james.h.bates@yahoo.com> >> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> > > with the simpleDRM arriving next merge I'm wondering if we need to keep it? SimpleDRM is not coming next merge-window. It's basically finished, but I'm still working on the user-space side as its KMS api is highly reduced compared to fully-featured DRM/KMS drivers. Maybe 3.13 will work out. Anyhow, this patch is still needed as it fixes a serious bug for simplefb. Thanks David -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 17:17 Thu 31 Oct , David Herrmann wrote: > Hi > > On Thu, Oct 31, 2013 at 11:45 AM, Jean-Christophe PLAGNIOL-VILLARD > <plagnioj@jcrosoft.com> wrote: > > On 18:40 Wed 02 Oct , David Herrmann wrote: > >> The dmi_list array is initialized using gnu designated initializers, and > >> therefore may contain fewer explicitly defined entries as there are > >> elements in it. This is because the enum above with M_xyz constants > >> contains more items than the designated initializer. Those elements not > >> explicitly initialized are implicitly set to 0. > >> > >> Now efifb_setup() loops through all these array elements, and performs > >> a strcmp on each item. For non explicitly initialized elements this will > >> be a null pointer: > >> > >> This patch swaps the check order in the if statement, thus checks first > >> whether dmi_list[i].base is null. > >> > >> Signed-off-by: James Bates <james.h.bates@yahoo.com> > >> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> > > > > with the simpleDRM arriving next merge I'm wondering if we need to keep it? > > SimpleDRM is not coming next merge-window. It's basically finished, > but I'm still working on the user-space side as its KMS api is highly > reduced compared to fully-featured DRM/KMS drivers. Maybe 3.13 will > work out. do you have a git tree for the simpleDRM that I can pull? > > Anyhow, this patch is still needed as it fixes a serious bug for simplefb. ok > > Thanks > David -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi On Fri, Nov 1, 2013 at 12:10 PM, Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> wrote: > On 17:17 Thu 31 Oct , David Herrmann wrote: >> Hi >> >> On Thu, Oct 31, 2013 at 11:45 AM, Jean-Christophe PLAGNIOL-VILLARD >> <plagnioj@jcrosoft.com> wrote: >> > On 18:40 Wed 02 Oct , David Herrmann wrote: >> >> The dmi_list array is initialized using gnu designated initializers, and >> >> therefore may contain fewer explicitly defined entries as there are >> >> elements in it. This is because the enum above with M_xyz constants >> >> contains more items than the designated initializer. Those elements not >> >> explicitly initialized are implicitly set to 0. >> >> >> >> Now efifb_setup() loops through all these array elements, and performs >> >> a strcmp on each item. For non explicitly initialized elements this will >> >> be a null pointer: >> >> >> >> This patch swaps the check order in the if statement, thus checks first >> >> whether dmi_list[i].base is null. >> >> >> >> Signed-off-by: James Bates <james.h.bates@yahoo.com> >> >> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> >> > >> > with the simpleDRM arriving next merge I'm wondering if we need to keep it? >> >> SimpleDRM is not coming next merge-window. It's basically finished, >> but I'm still working on the user-space side as its KMS api is highly >> reduced compared to fully-featured DRM/KMS drivers. Maybe 3.13 will >> work out. > > do you have a git tree for the simpleDRM that I can pull? Sure, I usually push it to my fdo tree: http://cgit.freedesktop.org/~dvdhrm/linux/log/?h=simpledrm But note that you shouldn't be using it right now. User-space fails on it as SimpleDRM only provides a single KMS-FB. It also needs to be adjusted to the new x86-sysfb changes and I am reworking the handover to real drivers. Cheers David -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/video/efifb.c b/drivers/video/efifb.c index 7f9ff75..fcb9500 100644 --- a/drivers/video/efifb.c +++ b/drivers/video/efifb.c @@ -108,8 +108,8 @@ static int efifb_setup(char *options) if (!*this_opt) continue; for (i = 0; i < M_UNKNOWN; i++) { - if (!strcmp(this_opt, efifb_dmi_list[i].optname) && - efifb_dmi_list[i].base != 0) { + if (efifb_dmi_list[i].base != 0 && + !strcmp(this_opt, efifb_dmi_list[i].optname)) { screen_info.lfb_base = efifb_dmi_list[i].base; screen_info.lfb_linelength = efifb_dmi_list[i].stride; screen_info.lfb_width = efifb_dmi_list[i].width;