randr: add BUG_* checks for possible NULL pointer issue
The ‘RRCrtcNotify() and RRCrtcSet() functions are exported, so there's chance that a buggy driver could call them with NULL parameter, leading to segfault. Those are hard to trace, so it's better having a BUG_* check here. | ../randr/rrcrtc.c: In function ‘RRCrtcNotify’: | ../randr/rrcrtc.c:187:5: warning: use of NULL ‘outputs’ where non-null expected [CWE-476] [-Wanalyzer-null-argument] | 187 | memcpy(crtc->outputs, outputs, numOutputs * sizeof(RROutputPtr)); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ../randr/rrcrtc.c: In function ‘RRCrtcSet’: | ../randr/rrcrtc.c:742:20: warning: dereference of NULL ‘outputs’ [CWE-476] [-Wanalyzer-null-dereference] | 742 | if (outputs[o]) { | | ~~~~~~~^~~ Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
parent
90cd5c38ee
commit
5193f57aae
|
@ -22,13 +22,15 @@
|
||||||
*/
|
*/
|
||||||
#include <dix-config.h>
|
#include <dix-config.h>
|
||||||
|
|
||||||
|
#include <X11/Xatom.h>
|
||||||
|
|
||||||
#include "randr/randrstr_priv.h"
|
#include "randr/randrstr_priv.h"
|
||||||
#include "randr/rrdispatch_priv.h"
|
#include "randr/rrdispatch_priv.h"
|
||||||
|
#include "os/bug_priv.h"
|
||||||
|
|
||||||
#include "swaprep.h"
|
#include "swaprep.h"
|
||||||
#include "mipointer.h"
|
#include "mipointer.h"
|
||||||
|
|
||||||
#include <X11/Xatom.h>
|
|
||||||
|
|
||||||
RESTYPE RRCrtcType = 0;
|
RESTYPE RRCrtcType = 0;
|
||||||
|
|
||||||
|
@ -184,10 +186,13 @@ RRCrtcNotify(RRCrtcPtr crtc,
|
||||||
crtc->outputs = newoutputs;
|
crtc->outputs = newoutputs;
|
||||||
crtc->numOutputs = numOutputs;
|
crtc->numOutputs = numOutputs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copy the new list of outputs into the crtc
|
* Copy the new list of outputs into the crtc
|
||||||
*/
|
*/
|
||||||
|
BUG_RETURN_VAL(outputs == NULL, FALSE);
|
||||||
memcpy(crtc->outputs, outputs, numOutputs * sizeof(RROutputPtr));
|
memcpy(crtc->outputs, outputs, numOutputs * sizeof(RROutputPtr));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Update remaining crtc fields
|
* Update remaining crtc fields
|
||||||
*/
|
*/
|
||||||
|
@ -749,6 +754,8 @@ RRCrtcSet(RRCrtcPtr crtc,
|
||||||
Bool crtcChanged;
|
Bool crtcChanged;
|
||||||
int o;
|
int o;
|
||||||
|
|
||||||
|
BUG_RETURN_VAL(outputs == NULL, FALSE);
|
||||||
|
|
||||||
rrScrPriv(pScreen);
|
rrScrPriv(pScreen);
|
||||||
|
|
||||||
crtcChanged = FALSE;
|
crtcChanged = FALSE;
|
||||||
|
|
Loading…
Reference in New Issue