Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(705)

Unified Diff: ui/base/x/x11_util.cc

Issue 10854242: Make shared memory segments writable only by their rightful owners. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/base/x/x11_util.cc
===================================================================
--- ui/base/x/x11_util.cc (revision 155390)
+++ ui/base/x/x11_util.cc (working copy)
@@ -14,6 +14,7 @@
#include <list>
#include <map>
+#include <utility>
#include <vector>
#include <X11/extensions/Xrandr.h>
@@ -166,7 +167,7 @@
// A process wide singleton that manages the usage of X cursors.
class XCursorCache {
public:
- XCursorCache() {}
+ XCursorCache() {}
~XCursorCache() {
Clear();
}
@@ -352,9 +353,14 @@
#endif
// Next we probe to see if shared memory will really work
- int shmkey = shmget(IPC_PRIVATE, 1, 0666);
- if (shmkey == -1)
+ int shmkey = shmget(IPC_PRIVATE, 1, 0600);
+ if (shmkey == -1) {
+ LOG(WARNING) << "Failed to get shared memory segment.";
return SHARED_MEMORY_NONE;
+ } else {
+ VLOG(1) << "Got shared memory segment " << shmkey;
+ }
+
void* address = shmat(shmkey, NULL, 0);
// Mark the shared memory region for deletion
shmctl(shmkey, IPC_RMID, NULL);
@@ -365,13 +371,21 @@
gdk_error_trap_push();
bool result = XShmAttach(dpy, &shminfo);
+ if (result)
+ VLOG(1) << "X got shared memory segment " << shmkey;
+ else
+ LOG(WARNING) << "X failed to attach to shared memory segment " << shmkey;
XSync(dpy, False);
if (gdk_error_trap_pop())
result = false;
shmdt(address);
- if (!result)
+ if (!result) {
+ LOG(WARNING) << "X failed to attach to shared memory segment " << shmkey;
return SHARED_MEMORY_NONE;
+ }
+ VLOG(1) << "X attached to shared memory segment " << shmkey;
+
XShmDetach(dpy, &shminfo);
return pixmaps_supported ? SHARED_MEMORY_PIXMAP : SHARED_MEMORY_PUTIMAGE;
}
@@ -856,8 +870,13 @@
// This function is only called if QuerySharedMemorySupport returned true. In
// which case we've already succeeded in having the X server attach to one of
// our shared memory segments.
- if (!XShmAttach(display, &shminfo))
+ if (!XShmAttach(display, &shminfo)) {
+ LOG(WARNING) << "X failed to attach to shared memory segment "
+ << shminfo.shmid;
NOTREACHED();
+ } else {
+ VLOG(1) << "X attached to shared memory segment " << shminfo.shmid;
+ }
return shminfo.shmseg;
}
@@ -1451,7 +1470,7 @@
XFreeExtensionList(ext_list);
}
- LOG(ERROR)
+ LOG(ERROR)
<< "X Error detected: "
<< "serial " << error_event.serial << ", "
<< "error_code " << static_cast<int>(error_event.error_code)

Powered by Google App Engine
This is Rietveld 408576698