diff options
author | 2013-12-15 22:09:36 +0000 | |
---|---|---|
committer | 2013-12-15 22:09:36 +0000 | |
commit | 9b506f639d54322efa46b911e2163a4075ba3edd (patch) | |
tree | 4def34cbf504c3bb8725de2514c7f3c5f126c96c | |
parent | add some comments and constify a constant (diff) | |
download | wireguard-openbsd-9b506f639d54322efa46b911e2163a4075ba3edd.tar.xz wireguard-openbsd-9b506f639d54322efa46b911e2163a4075ba3edd.zip |
Fix error handling of ->fb_create() call. Prevents kernel panic if an
unsupported frame buffer configuration is requested.
-rw-r--r-- | sys/dev/pci/drm/drmP.h | 8 | ||||
-rw-r--r-- | sys/dev/pci/drm/drm_crtc.c | 8 |
2 files changed, 12 insertions, 4 deletions
diff --git a/sys/dev/pci/drm/drmP.h b/sys/dev/pci/drm/drmP.h index c0d99f04293..01e1471e988 100644 --- a/sys/dev/pci/drm/drmP.h +++ b/sys/dev/pci/drm/drmP.h @@ -1,4 +1,4 @@ -/* $OpenBSD: drmP.h,v 1.156 2013/12/05 13:29:56 kettenis Exp $ */ +/* $OpenBSD: drmP.h,v 1.157 2013/12/15 22:09:36 kettenis Exp $ */ /* drmP.h -- Private header for Direct Rendering Manager -*- linux-c -*- * Created: Mon Jan 4 10:05:05 1999 by faith@precisioninsight.com */ @@ -199,6 +199,12 @@ ERR_PTR(long error) } static inline long +PTR_ERR(const void *ptr) +{ + return (long) ptr; +} + +static inline long IS_ERR(const void *ptr) { return IS_ERR_VALUE((unsigned long)ptr); diff --git a/sys/dev/pci/drm/drm_crtc.c b/sys/dev/pci/drm/drm_crtc.c index b0146c38864..00d1223fdc9 100644 --- a/sys/dev/pci/drm/drm_crtc.c +++ b/sys/dev/pci/drm/drm_crtc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: drm_crtc.c,v 1.3 2013/09/02 10:18:26 jsg Exp $ */ +/* $OpenBSD: drm_crtc.c,v 1.4 2013/12/15 22:09:37 kettenis Exp $ */ /* * Copyright (c) 2006-2008 Intel Corporation * Copyright (c) 2007 Dave Airlie <airlied@linux.ie> @@ -2226,8 +2226,9 @@ int drm_mode_addfb(struct drm_device *dev, /* TODO setup destructor callback */ fb = dev->mode_config.funcs->fb_create(dev, file_priv, &r); - if (fb == NULL) { + if (IS_ERR(fb)) { DRM_DEBUG_KMS("could not create framebuffer\n"); + ret = -PTR_ERR(fb); goto out; } @@ -2411,8 +2412,9 @@ int drm_mode_addfb2(struct drm_device *dev, rw_enter_write(&dev->mode_config.rwl); fb = dev->mode_config.funcs->fb_create(dev, file_priv, r); - if (fb == NULL) { + if (IS_ERR(fb)) { DRM_DEBUG_KMS("could not create framebuffer\n"); + ret = -PTR_ERR(fb); goto out; } |