summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2013-12-15 22:09:36 +0000
committerkettenis <kettenis@openbsd.org>2013-12-15 22:09:36 +0000
commit9b506f639d54322efa46b911e2163a4075ba3edd (patch)
tree4def34cbf504c3bb8725de2514c7f3c5f126c96c
parentadd some comments and constify a constant (diff)
downloadwireguard-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.h8
-rw-r--r--sys/dev/pci/drm/drm_crtc.c8
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;
}