diff --git a/libcutils/uevent.c b/libcutils/uevent.c index de5d227be..f548dca2f 100644 --- a/libcutils/uevent.c +++ b/libcutils/uevent.c @@ -116,7 +116,12 @@ int uevent_open_socket(int buf_sz, bool passcred) if(s < 0) return -1; - setsockopt(s, SOL_SOCKET, SO_RCVBUFFORCE, &buf_sz, sizeof(buf_sz)); + /* buf_sz should be less than net.core.rmem_max for this to succeed */ + if (setsockopt(s, SOL_SOCKET, SO_RCVBUF, &buf_sz, sizeof(buf_sz)) < 0) { + close(s); + return -1; + } + setsockopt(s, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)); if(bind(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) { diff --git a/rootdir/init.rc b/rootdir/init.rc index 8903255d4..249b9e285 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc @@ -125,6 +125,12 @@ on init write /proc/sys/kernel/sched_rt_runtime_us 950000 write /proc/sys/kernel/sched_rt_period_us 1000000 + # Assign reasonable ceiling values for socket rcv/snd buffers. + # These should almost always be overridden by the target per the + # the corresponding technology maximums. + write /proc/sys/net/core/rmem_max 262144 + write /proc/sys/net/core/wmem_max 262144 + # reflect fwmark from incoming packets onto generated replies write /proc/sys/net/ipv4/fwmark_reflect 1 write /proc/sys/net/ipv6/fwmark_reflect 1