Backport semarie@'s improvement of the pledge patch which is now

upstream.  i3 is now pledged unconditionally and the shmlog can
again be enabled at runtime.

ok dcoppa@
This commit is contained in:
tb 2016-01-18 10:04:28 +00:00
parent a8f19eecd5
commit a538b86afc
3 changed files with 53 additions and 13 deletions

View File

@ -1,9 +1,9 @@
# $OpenBSD: Makefile,v 1.101 2016/01/15 19:57:24 sthen Exp $
# $OpenBSD: Makefile,v 1.102 2016/01/18 10:04:28 tb Exp $
COMMENT = improved dynamic tiling window manager
DISTNAME = i3-4.11
REVISION = 1
REVISION = 2
CATEGORIES = x11
EXTRACT_SUFX = .tar.bz2

View File

@ -1,9 +1,9 @@
$OpenBSD: patch-src_log_c,v 1.10 2015/10/04 08:48:12 dcoppa Exp $
$OpenBSD: patch-src_log_c,v 1.11 2016/01/18 10:04:29 tb Exp $
OpenBSD lacks pthread_condattr_setpshared()
--- src/log.c.orig Wed Sep 30 08:55:10 2015
+++ src/log.c Fri Oct 2 16:58:54 2015
+++ src/log.c Sun Jan 17 23:10:44 2016
@@ -20,7 +20,9 @@
#include <sys/mman.h>
#include <sys/stat.h>
@ -14,7 +14,49 @@ OpenBSD lacks pthread_condattr_setpshared()
#include "util.h"
#include "log.h"
@@ -154,11 +156,13 @@ void open_logbuffer(void) {
@@ -58,6 +60,8 @@ static char *loglastwrap;
static int logbuffer_size;
/* File descriptor for shm_open. */
static int logbuffer_shm;
+/* Size (in bytes) of physical memory */
+static long long physical_mem_bytes;
/*
* Writes the offsets for the next write and for the last wrap to the
@@ -89,6 +93,16 @@ void init_logging(void) {
}
}
}
+ if (physical_mem_bytes == 0) {
+#if defined(__APPLE__)
+ int mib[2] = {CTL_HW, HW_MEMSIZE};
+ size_t length = sizeof(long long);
+ sysctl(mib, 2, &physical_mem_bytes, &length, NULL, 0);
+#else
+ physical_mem_bytes = (long long)sysconf(_SC_PHYS_PAGES) *
+ sysconf(_SC_PAGESIZE);
+#endif
+ }
/* Start SHM logging if shmlog_size is > 0. shmlog_size is SHMLOG_SIZE by
* default on development versions, and 0 on release versions. If it is
* not > 0, the user has turned it off, so let's close the logbuffer. */
@@ -108,15 +122,6 @@ void open_logbuffer(void) {
* For 512 MiB of RAM this will lead to a 5 MiB log buffer.
* At the moment (2011-12-10), no testcase leads to an i3 log
* of more than ~ 600 KiB. */
- long long physical_mem_bytes;
-#if defined(__APPLE__)
- int mib[2] = {CTL_HW, HW_MEMSIZE};
- size_t length = sizeof(long long);
- sysctl(mib, 2, &physical_mem_bytes, &length, NULL, 0);
-#else
- physical_mem_bytes = (long long)sysconf(_SC_PHYS_PAGES) *
- sysconf(_SC_PAGESIZE);
-#endif
logbuffer_size = min(physical_mem_bytes * 0.01, shmlog_size);
#if defined(__FreeBSD__)
sasprintf(&shmlogname, "/tmp/i3-log-%d", getpid());
@@ -154,11 +159,13 @@ void open_logbuffer(void) {
header = (i3_shmlog_header *)logbuffer;
@ -28,7 +70,7 @@ OpenBSD lacks pthread_condattr_setpshared()
logwalk = logbuffer + sizeof(i3_shmlog_header);
loglastwrap = logbuffer + logbuffer_size;
@@ -273,8 +277,10 @@ static void vlog(const bool print, const char *fmt, va
@@ -273,8 +280,10 @@ static void vlog(const bool print, const char *fmt, va
store_log_markers();

View File

@ -1,4 +1,4 @@
$OpenBSD: patch-src_main_c,v 1.15 2015/12/21 10:16:03 tb Exp $
$OpenBSD: patch-src_main_c,v 1.16 2016/01/18 10:04:29 tb Exp $
Bugfix: add keymap fall back (_XKB_RULES_NAMES, then defaults)
@ -9,7 +9,7 @@ add pledge:
"proc exec" for executing programs
--- src/main.c.orig Wed Sep 30 08:55:10 2015
+++ src/main.c Sun Dec 20 14:58:54 2015
+++ src/main.c Sun Jan 17 17:55:53 2016
@@ -87,6 +87,7 @@ struct ws_assignments_head ws_assignments = TAILQ_HEAD
/* We hope that those are supported and set them to true */
@ -26,16 +26,14 @@ add pledge:
if (!extreply->present) {
DLOG("xkb is not present on this server\n");
} else {
@@ -784,6 +786,13 @@ int main(int argc, char *argv[]) {
@@ -784,6 +786,11 @@ int main(int argc, char *argv[]) {
xcb_free_gc(conn, gc);
xcb_free_pixmap(conn, pixmap);
}
+
+#if defined(__OpenBSD__)
+ /* can't use pledge if shm* calls are used */
+ if (shmlog_size == 0)
+ if (pledge("stdio rpath wpath cpath proc exec unix", NULL) == -1)
+ err(EXIT_FAILURE, "pledge");
+ if (pledge("stdio rpath wpath cpath proc exec unix", NULL) == -1)
+ err(EXIT_FAILURE, "pledge");
+#endif
struct sigaction action;