security: Grant untrusted windows remove access on all windows.
This allows untrusted clients to destroy their own windows when they have been reparented by a trusted window manager.
This commit is contained in:
parent
3481b32ab9
commit
4559d2ace6
|
@ -74,6 +74,7 @@ static char *SecurityTrustedExtensions[] = {
|
||||||
static const Mask SecurityResourceMask =
|
static const Mask SecurityResourceMask =
|
||||||
DixGetAttrAccess | DixReceiveAccess | DixListPropAccess |
|
DixGetAttrAccess | DixReceiveAccess | DixListPropAccess |
|
||||||
DixGetPropAccess | DixListAccess;
|
DixGetPropAccess | DixListAccess;
|
||||||
|
static const Mask SecurityWindowExtraMask = DixRemoveAccess;
|
||||||
static const Mask SecurityRootWindowExtraMask =
|
static const Mask SecurityRootWindowExtraMask =
|
||||||
DixReceiveAccess | DixSendAccess | DixAddAccess | DixRemoveAccess;
|
DixReceiveAccess | DixSendAccess | DixAddAccess | DixRemoveAccess;
|
||||||
static const Mask SecurityDeviceMask =
|
static const Mask SecurityDeviceMask =
|
||||||
|
@ -817,6 +818,10 @@ SecurityResource(CallbackListPtr *pcbl, pointer unused, pointer calldata)
|
||||||
if (subj->haveState && subj->trustLevel != XSecurityClientTrusted)
|
if (subj->haveState && subj->trustLevel != XSecurityClientTrusted)
|
||||||
((WindowPtr)rec->res)->forcedBG = TRUE;
|
((WindowPtr)rec->res)->forcedBG = TRUE;
|
||||||
|
|
||||||
|
/* additional permissions for specific resource types */
|
||||||
|
if (rec->rtype == RT_WINDOW)
|
||||||
|
allowed |= SecurityWindowExtraMask;
|
||||||
|
|
||||||
/* special checks for server-owned resources */
|
/* special checks for server-owned resources */
|
||||||
if (cid == 0) {
|
if (cid == 0) {
|
||||||
if (rec->rtype & RC_DRAWABLE)
|
if (rec->rtype & RC_DRAWABLE)
|
||||||
|
|
Loading…
Reference in New Issue