<feed xmlns='http://www.w3.org/2005/Atom'>
<title>xavi/android_kernel_m2note/net/irda, branch ng-7.1.2</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>https://gitea.privatedns.org/xavi/android_kernel_m2note/atom?h=ng-7.1.2</id>
<link rel='self' href='https://gitea.privatedns.org/xavi/android_kernel_m2note/atom?h=ng-7.1.2'/>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/android_kernel_m2note/'/>
<updated>2019-05-03T16:55:13+00:00</updated>
<entry>
<title>irda: Only insert new objects into the global database via setsockopt</title>
<updated>2019-05-03T16:55:13+00:00</updated>
<author>
<name>Tyler Hicks</name>
<email>tyhicks@canonical.com</email>
</author>
<published>2018-09-04T15:24:05+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/android_kernel_m2note/commit/?id=e3294a62938eb7d310d9fb1b0f430bef46a80beb'/>
<id>urn:sha1:e3294a62938eb7d310d9fb1b0f430bef46a80beb</id>
<content type='text'>
The irda_setsockopt() function conditionally allocates memory for a new
self-&gt;ias_object or, in some cases, reuses the existing
self-&gt;ias_object. Existing objects were incorrectly reinserted into the
LM_IAS database which corrupted the doubly linked list used for the
hashbin implementation of the LM_IAS database. When combined with a
memory leak in irda_bind(), this issue could be leveraged to create a
use-after-free vulnerability in the hashbin list. This patch fixes the
issue by only inserting newly allocated objects into the database.

CVE-2018-6555

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Change-Id: Ia3a3b6888ea40dec69bf950a65c53e054fb0029f
Signed-off-by: Tyler Hicks &lt;tyhicks@canonical.com&gt;
Reviewed-by: Seth Arnold &lt;seth.arnold@canonical.com&gt;
Reviewed-by: Stefan Bader &lt;stefan.bader@canonical.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
Signed-off-by: Ben Hutchings &lt;ben@decadent.org.uk&gt;
</content>
</entry>
<entry>
<title>irda: Fix memory leak caused by repeated binds of irda socket</title>
<updated>2019-05-03T16:55:01+00:00</updated>
<author>
<name>Tyler Hicks</name>
<email>tyhicks@canonical.com</email>
</author>
<published>2018-09-04T15:24:04+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/android_kernel_m2note/commit/?id=8b10052924761b584d0cf156e265f14942bff9bf'/>
<id>urn:sha1:8b10052924761b584d0cf156e265f14942bff9bf</id>
<content type='text'>
The irda_bind() function allocates memory for self-&gt;ias_obj without
checking to see if the socket is already bound. A userspace process
could repeatedly bind the socket, have each new object added into the
LM-IAS database, and lose the reference to the old object assigned to
the socket to exhaust memory resources. This patch errors out of the
bind operation when self-&gt;ias_obj is already assigned.

CVE-2018-6554

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Change-Id: Ia5e9fde9ca3408595602453dd7ff5ebb3fcb6c31
Signed-off-by: Tyler Hicks &lt;tyhicks@canonical.com&gt;
Reviewed-by: Seth Arnold &lt;seth.arnold@canonical.com&gt;
Reviewed-by: Stefan Bader &lt;stefan.bader@canonical.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
Signed-off-by: Ben Hutchings &lt;ben@decadent.org.uk&gt;
</content>
</entry>
<entry>
<title>Replace &lt;asm/uaccess.h&gt; with &lt;linux/uaccess.h&gt; globally</title>
<updated>2018-11-29T16:49:05+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2016-12-24T19:46:01+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/android_kernel_m2note/commit/?id=8588b01909e0145e5e84f5fe0a5353bd194f205c'/>
<id>urn:sha1:8588b01909e0145e5e84f5fe0a5353bd194f205c</id>
<content type='text'>
This was entirely automated, using the script by Al:

  PATT='^[[:blank:]]*#[[:blank:]]*include[[:blank:]]*&lt;asm/uaccess.h&gt;'
  sed -i -e "s!$PATT!#include &lt;linux/uaccess.h&gt;!" \
        $(git grep -l "$PATT"|grep -v ^include/linux/uaccess.h)

to do the replacement at the end of the merge window.

Requested-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Signed-off-by: Moyster &lt;oysterized@gmail.com&gt;
</content>
</entry>
<entry>
<title>irda: Fix lockdep annotations in hashbin_delete().</title>
<updated>2017-04-13T10:35:28+00:00</updated>
<author>
<name>David S. Miller</name>
<email>davem@davemloft.net</email>
</author>
<published>2017-02-17T21:19:39+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/android_kernel_m2note/commit/?id=08d690af9924fa05b345854492d32e05b2ad6ebd'/>
<id>urn:sha1:08d690af9924fa05b345854492d32e05b2ad6ebd</id>
<content type='text'>
A nested lock depth was added to the hasbin_delete() code but it
doesn't actually work some well and results in tons of lockdep splats.

Fix the code instead to properly drop the lock around the operation
and just keep peeking the head of the hashbin queue.

Change-Id: I0cb630739aa44b9e7c4a5b775e906713775f13ef
Reported-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
Tested-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>net/irda: handle iriap_register_lsap() allocation failure</title>
<updated>2017-04-11T08:58:36+00:00</updated>
<author>
<name>Vegard Nossum</name>
<email>vegard.nossum@oracle.com</email>
</author>
<published>2016-08-12T08:29:13+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/android_kernel_m2note/commit/?id=1358eab7f231bbaba51df33669dfb808d3e418dd'/>
<id>urn:sha1:1358eab7f231bbaba51df33669dfb808d3e418dd</id>
<content type='text'>
commit 5ba092efc7ddff040777ae7162f1d195f513571b upstream.

If iriap_register_lsap() fails to allocate memory, self-&gt;lsap is
set to NULL. However, none of the callers handle the failure and
irlmp_connect_request() will happily dereference it:

    iriap_register_lsap: Unable to allocated LSAP!
    ================================================================================
    UBSAN: Undefined behaviour in net/irda/irlmp.c:378:2
    member access within null pointer of type 'struct lsap_cb'
    CPU: 1 PID: 15403 Comm: trinity-c0 Not tainted 4.8.0-rc1+ #81
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.3-0-ge2fc41e-prebuilt.qemu-project.org
    04/01/2014
     0000000000000000 ffff88010c7e78a8 ffffffff82344f40 0000000041b58ab3
     ffffffff84f98000 ffffffff82344e94 ffff88010c7e78d0 ffff88010c7e7880
     ffff88010630ad00 ffffffff84a5fae0 ffffffff84d3f5c0 000000000000017a
    Call Trace:
     [&lt;ffffffff82344f40&gt;] dump_stack+0xac/0xfc
     [&lt;ffffffff8242f5a8&gt;] ubsan_epilogue+0xd/0x8a
     [&lt;ffffffff824302bf&gt;] __ubsan_handle_type_mismatch+0x157/0x411
     [&lt;ffffffff83b7bdbc&gt;] irlmp_connect_request+0x7ac/0x970
     [&lt;ffffffff83b77cc0&gt;] iriap_connect_request+0xa0/0x160
     [&lt;ffffffff83b77f48&gt;] state_s_disconnect+0x88/0xd0
     [&lt;ffffffff83b78904&gt;] iriap_do_client_event+0x94/0x120
     [&lt;ffffffff83b77710&gt;] iriap_getvaluebyclass_request+0x3e0/0x6d0
     [&lt;ffffffff83ba6ebb&gt;] irda_find_lsap_sel+0x1eb/0x630
     [&lt;ffffffff83ba90c8&gt;] irda_connect+0x828/0x12d0
     [&lt;ffffffff833c0dfb&gt;] SYSC_connect+0x22b/0x340
     [&lt;ffffffff833c7e09&gt;] SyS_connect+0x9/0x10
     [&lt;ffffffff81007bd3&gt;] do_syscall_64+0x1b3/0x4b0
     [&lt;ffffffff845f946a&gt;] entry_SYSCALL64_slow_path+0x25/0x25
    ================================================================================

The bug seems to have been around since forever.

There's more problems with missing error checks in iriap_init() (and
indeed all of irda_init()), but that's a bigger problem that needs
very careful review and testing. This patch will fix the most serious
bug (as it's easily reached from unprivileged userspace).

I have tested my patch with a reproducer.

Signed-off-by: Vegard Nossum &lt;vegard.nossum@oracle.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Willy Tarreau &lt;w@1wt.eu&gt;
</content>
</entry>
<entry>
<title>net: add validation for the socket syscall protocol argument</title>
<updated>2016-11-17T11:11:47+00:00</updated>
<author>
<name>Hannes Frederic Sowa</name>
<email>hannes@stressinduktion.org</email>
</author>
<published>2015-12-14T21:03:39+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/android_kernel_m2note/commit/?id=8af514925e2411ebb51dcef625ea9e42080b0cce'/>
<id>urn:sha1:8af514925e2411ebb51dcef625ea9e42080b0cce</id>
<content type='text'>
郭永刚 reported that one could simply crash the kernel as root by
using a simple program:

	int socket_fd;
	struct sockaddr_in addr;
	addr.sin_port = 0;
	addr.sin_addr.s_addr = INADDR_ANY;
	addr.sin_family = 10;

	socket_fd = socket(10,3,0x40000000);
	connect(socket_fd , &amp;addr,16);

AF_INET, AF_INET6 sockets actually only support 8-bit protocol
identifiers. inet_sock's skc_protocol field thus is sized accordingly,
thus larger protocol identifiers simply cut off the higher bits and
store a zero in the protocol fields.

This could lead to e.g. NULL function pointer because as a result of
the cut off inet_num is zero and we call down to inet_autobind, which
is NULL for raw sockets.

kernel: Call Trace:
kernel:  [&lt;ffffffff816db90e&gt;] ? inet_autobind+0x2e/0x70
kernel:  [&lt;ffffffff816db9a4&gt;] inet_dgram_connect+0x54/0x80
kernel:  [&lt;ffffffff81645069&gt;] SYSC_connect+0xd9/0x110
kernel:  [&lt;ffffffff810ac51b&gt;] ? ptrace_notify+0x5b/0x80
kernel:  [&lt;ffffffff810236d8&gt;] ? syscall_trace_enter_phase2+0x108/0x200
kernel:  [&lt;ffffffff81645e0e&gt;] SyS_connect+0xe/0x10
kernel:  [&lt;ffffffff81779515&gt;] tracesys_phase2+0x84/0x89

I found no particular commit which introduced this problem.

Change-Id: I653fad90da54908144cc8916c2dccb1fa6f14eed
CVE: CVE-2015-8543
Cc: Cong Wang &lt;cwang@twopensource.com&gt;
Reported-by: 郭永刚 &lt;guoyonggang@360.cn&gt;
Signed-off-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>3.10.102-&gt; 3.10.103</title>
<updated>2016-09-09T22:45:11+00:00</updated>
<author>
<name>Jan Engelmohr</name>
<email>jan.engelmohr@mailbox.tu-dresden.de</email>
</author>
<published>2016-09-04T14:45:09+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/android_kernel_m2note/commit/?id=0a1e8e11acd3cc36b1d65023ce1cb1a06a887b11'/>
<id>urn:sha1:0a1e8e11acd3cc36b1d65023ce1cb1a06a887b11</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Linux 3.10.95 (accumulative patch)</title>
<updated>2016-08-26T18:47:31+00:00</updated>
<author>
<name>Stefan Guendhoer</name>
<email>stefan@guendhoer.com</email>
</author>
<published>2016-01-23T13:45:52+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/android_kernel_m2note/commit/?id=982ceba27dcd67080055fd9d1f21e7cc1ca852af'/>
<id>urn:sha1:982ceba27dcd67080055fd9d1f21e7cc1ca852af</id>
<content type='text'>
commit 14b58660bc26be42d272f7fb0d153ed8fc0a0c4e
Author: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
Date:   Fri Jan 22 20:33:57 2016 -0800

    Linux 3.10.95

commit 84de97ff5075bb6b4c25e8cbbcd40e55da1c1d4c
Author: Yevgeny Pats &lt;yevgeny@perception-point.io&gt;
Date:   Tue Jan 19 22:09:04 2016 +0000

    KEYS: Fix keyring ref leak in join_session_keyring()

    commit 23567fd052a9abb6d67fe8e7a9ccdd9800a540f2 upstream.

    This fixes CVE-2016-0728.

    If a thread is asked to join as a session keyring the keyring that's already
    set as its session, we leak a keyring reference.

    This can be tested with the following program:

    	#include &lt;stddef.h&gt;
    	#include &lt;stdio.h&gt;
    	#include &lt;sys/types.h&gt;
    	#include &lt;keyutils.h&gt;

    	int main(int argc, const char *argv[])
    	{
    		int i = 0;
    		key_serial_t serial;

    		serial = keyctl(KEYCTL_JOIN_SESSION_KEYRING,
    				"leaked-keyring");
    		if (serial &lt; 0) {
    			perror("keyctl");
    			return -1;
    		}

    		if (keyctl(KEYCTL_SETPERM, serial,
    			   KEY_POS_ALL | KEY_USR_ALL) &lt; 0) {
    			perror("keyctl");
    			return -1;
    		}

    		for (i = 0; i &lt; 100; i++) {
    			serial = keyctl(KEYCTL_JOIN_SESSION_KEYRING,
    					"leaked-keyring");
    			if (serial &lt; 0) {
    				perror("keyctl");
    				return -1;
    			}
    		}

    		return 0;
    	}

    If, after the program has run, there something like the following line in
    /proc/keys:

    3f3d898f I--Q---   100 perm 3f3f0000     0     0 keyring   leaked-keyring: empty

    with a usage count of 100 * the number of times the program has been run,
    then the kernel is malfunctioning.  If leaked-keyring has zero usages or
    has been garbage collected, then the problem is fixed.

    Reported-by: Yevgeny Pats &lt;yevgeny@perception-point.io&gt;
    Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
    Acked-by: Don Zickus &lt;dzickus@redhat.com&gt;
    Acked-by: Prarit Bhargava &lt;prarit@redhat.com&gt;
    Acked-by: Jarod Wilson &lt;jarod@redhat.com&gt;
    Signed-off-by: James Morris &lt;james.l.morris@oracle.com&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit afd8f582ae388b0d1c7d0532dc31f4f85c1098dc
Author: David Howells &lt;dhowells@redhat.com&gt;
Date:   Fri Dec 18 01:34:26 2015 +0000

    KEYS: Fix race between read and revoke

    commit b4a1b4f5047e4f54e194681125c74c0aa64d637d upstream.

    This fixes CVE-2015-7550.

    There's a race between keyctl_read() and keyctl_revoke().  If the revoke
    happens between keyctl_read() checking the validity of a key and the key's
    semaphore being taken, then the key type read method will see a revoked key.

    This causes a problem for the user-defined key type because it assumes in
    its read method that there will always be a payload in a non-revoked key
    and doesn't check for a NULL pointer.

    Fix this by making keyctl_read() check the validity of a key after taking
    semaphore instead of before.

    I think the bug was introduced with the original keyrings code.

    This was discovered by a multithreaded test program generated by syzkaller
    (http://github.com/google/syzkaller).  Here's a cleaned up version:

    	#include &lt;sys/types.h&gt;
    	#include &lt;keyutils.h&gt;
    	#include &lt;pthread.h&gt;
    	void *thr0(void *arg)
    	{
    		key_serial_t key = (unsigned long)arg;
    		keyctl_revoke(key);
    		return 0;
    	}
    	void *thr1(void *arg)
    	{
    		key_serial_t key = (unsigned long)arg;
    		char buffer[16];
    		keyctl_read(key, buffer, 16);
    		return 0;
    	}
    	int main()
    	{
    		key_serial_t key = add_key("user", "%", "foo", 3, KEY_SPEC_USER_KEYRING);
    		pthread_t th[5];
    		pthread_create(&amp;th[0], 0, thr0, (void *)(unsigned long)key);
    		pthread_create(&amp;th[1], 0, thr1, (void *)(unsigned long)key);
    		pthread_create(&amp;th[2], 0, thr0, (void *)(unsigned long)key);
    		pthread_create(&amp;th[3], 0, thr1, (void *)(unsigned long)key);
    		pthread_join(th[0], 0);
    		pthread_join(th[1], 0);
    		pthread_join(th[2], 0);
    		pthread_join(th[3], 0);
    		return 0;
    	}

    Build as:

    	cc -o keyctl-race keyctl-race.c -lkeyutils -lpthread

    Run as:

    	while keyctl-race; do :; done

    as it may need several iterations to crash the kernel.  The crash can be
    summarised as:

    	BUG: unable to handle kernel NULL pointer dereference at 0000000000000010
    	IP: [&lt;ffffffff81279b08&gt;] user_read+0x56/0xa3
    	...
    	Call Trace:
    	 [&lt;ffffffff81276aa9&gt;] keyctl_read_key+0xb6/0xd7
    	 [&lt;ffffffff81277815&gt;] SyS_keyctl+0x83/0xe0
    	 [&lt;ffffffff815dbb97&gt;] entry_SYSCALL_64_fastpath+0x12/0x6f

    Reported-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
    Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
    Tested-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
    Signed-off-by: James Morris &lt;james.l.morris@oracle.com&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 577ee88e9632fe613c28381dc1a1cc32198fc924
Author: David Howells &lt;dhowells@redhat.com&gt;
Date:   Thu Oct 15 17:21:37 2015 +0100

    KEYS: Fix crash when attempt to garbage collect an uninstantiated keyring

    commit f05819df10d7b09f6d1eb6f8534a8f68e5a4fe61 upstream.

    The following sequence of commands:

        i=`keyctl add user a a @s`
        keyctl request2 keyring foo bar @t
        keyctl unlink $i @s

    tries to invoke an upcall to instantiate a keyring if one doesn't already
    exist by that name within the user's keyring set.  However, if the upcall
    fails, the code sets keyring-&gt;type_data.reject_error to -ENOKEY or some
    other error code.  When the key is garbage collected, the key destroy
    function is called unconditionally and keyring_destroy() uses list_empty()
    on keyring-&gt;type_data.link - which is in a union with reject_error.
    Subsequently, the kernel tries to unlink the keyring from the keyring names
    list - which oopses like this:

    	BUG: unable to handle kernel paging request at 00000000ffffff8a
    	IP: [&lt;ffffffff8126e051&gt;] keyring_destroy+0x3d/0x88
    	...
    	Workqueue: events key_garbage_collector
    	...
    	RIP: 0010:[&lt;ffffffff8126e051&gt;] keyring_destroy+0x3d/0x88
    	RSP: 0018:ffff88003e2f3d30  EFLAGS: 00010203
    	RAX: 00000000ffffff82 RBX: ffff88003bf1a900 RCX: 0000000000000000
    	RDX: 0000000000000000 RSI: 000000003bfc6901 RDI: ffffffff81a73a40
    	RBP: ffff88003e2f3d38 R08: 0000000000000152 R09: 0000000000000000
    	R10: ffff88003e2f3c18 R11: 000000000000865b R12: ffff88003bf1a900
    	R13: 0000000000000000 R14: ffff88003bf1a908 R15: ffff88003e2f4000
    	...
    	CR2: 00000000ffffff8a CR3: 000000003e3ec000 CR4: 00000000000006f0
    	...
    	Call Trace:
    	 [&lt;ffffffff8126c756&gt;] key_gc_unused_keys.constprop.1+0x5d/0x10f
    	 [&lt;ffffffff8126ca71&gt;] key_garbage_collector+0x1fa/0x351
    	 [&lt;ffffffff8105ec9b&gt;] process_one_work+0x28e/0x547
    	 [&lt;ffffffff8105fd17&gt;] worker_thread+0x26e/0x361
    	 [&lt;ffffffff8105faa9&gt;] ? rescuer_thread+0x2a8/0x2a8
    	 [&lt;ffffffff810648ad&gt;] kthread+0xf3/0xfb
    	 [&lt;ffffffff810647ba&gt;] ? kthread_create_on_node+0x1c2/0x1c2
    	 [&lt;ffffffff815f2ccf&gt;] ret_from_fork+0x3f/0x70
    	 [&lt;ffffffff810647ba&gt;] ? kthread_create_on_node+0x1c2/0x1c2

    Note the value in RAX.  This is a 32-bit representation of -ENOKEY.

    The solution is to only call -&gt;destroy() if the key was successfully
    instantiated.

    Reported-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
    Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
    Tested-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit ccc152bf4abb68e6d2c55091252f870bc4ee7a92
Author: David Howells &lt;dhowells@redhat.com&gt;
Date:   Fri Sep 25 16:30:08 2015 +0100

    KEYS: Fix race between key destruction and finding a keyring by name

    commit 94c4554ba07adbdde396748ee7ae01e86cf2d8d7 upstream.

    There appears to be a race between:

     (1) key_gc_unused_keys() which frees key-&gt;security and then calls
         keyring_destroy() to unlink the name from the name list

     (2) find_keyring_by_name() which calls key_permission(), thus accessing
         key-&gt;security, on a key before checking to see whether the key usage is 0
         (ie. the key is dead and might be cleaned up).

    Fix this by calling -&gt;destroy() before cleaning up the core key data -
    including key-&gt;security.

    Reported-by: Petr Matousek &lt;pmatouse@redhat.com&gt;
    Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 3a57e783016bf43ab9326172217f564941b85b17
Author: Rainer Weikusat &lt;rweikusat@mobileactivedefense.com&gt;
Date:   Wed Dec 16 20:09:25 2015 +0000

    af_unix: Revert 'lock_interruptible' in stream receive code

    [ Upstream commit 3822b5c2fc62e3de8a0f33806ff279fb7df92432 ]

    With b3ca9b02b00704053a38bfe4c31dbbb9c13595d0, the AF_UNIX SOCK_STREAM
    receive code was changed from using mutex_lock(&amp;u-&gt;readlock) to
    mutex_lock_interruptible(&amp;u-&gt;readlock) to prevent signals from being
    delayed for an indefinite time if a thread sleeping on the mutex
    happened to be selected for handling the signal. But this was never a
    problem with the stream receive code (as opposed to its datagram
    counterpart) as that never went to sleep waiting for new messages with the
    mutex held and thus, wouldn't cause secondary readers to block on the
    mutex waiting for the sleeping primary reader. As the interruptible
    locking makes the code more complicated in exchange for no benefit,
    change it back to using mutex_lock.

    Signed-off-by: Rainer Weikusat &lt;rweikusat@mobileactivedefense.com&gt;
    Acked-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit aea23834fd3daa60039be8773aa39fb039aac945
Author: David S. Miller &lt;davem@davemloft.net&gt;
Date:   Tue Dec 15 15:39:08 2015 -0500

    bluetooth: Validate socket address length in sco_sock_bind().

    [ Upstream commit 5233252fce714053f0151680933571a2da9cbfb4 ]

    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 83f2b0860770d05f14cb8ce29ffd18f2f5585a4e
Author: WANG Cong &lt;xiyou.wangcong@gmail.com&gt;
Date:   Mon Dec 14 13:48:36 2015 -0800

    pptp: verify sockaddr_len in pptp_bind() and pptp_connect()

    [ Upstream commit 09ccfd238e5a0e670d8178cf50180ea81ae09ae1 ]

    Reported-by: Dmitry Vyukov &lt;dvyukov@gmail.com&gt;
    Signed-off-by: Cong Wang &lt;xiyou.wangcong@gmail.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 457fca596cd37ea06006b290bdbc5c7c5d8a12e3
Author: Sergei Shtylyov &lt;sergei.shtylyov@cogentembedded.com&gt;
Date:   Fri Dec 4 01:45:40 2015 +0300

    sh_eth: fix kernel oops in skb_put()

    [ Upstream commit 248be83dcb3feb3f6332eb3d010a016402138484 ]

    In a low memory situation the following kernel oops occurs:

    Unable to handle kernel NULL pointer dereference at virtual address 00000050
    pgd = 8490c000
    [00000050] *pgd=4651e831, *pte=00000000, *ppte=00000000
    Internal error: Oops: 17 [#1] PREEMPT ARM
    Modules linked in:
    CPU: 0    Not tainted  (3.4-at16 #9)
    PC is at skb_put+0x10/0x98
    LR is at sh_eth_poll+0x2c8/0xa10
    pc : [&lt;8035f780&gt;]    lr : [&lt;8028bf50&gt;]    psr: 60000113
    sp : 84eb1a90  ip : 84eb1ac8  fp : 84eb1ac4
    r10: 0000003f  r9 : 000005ea  r8 : 00000000
    r7 : 00000000  r6 : 940453b0  r5 : 00030000  r4 : 9381b180
    r3 : 00000000  r2 : 00000000  r1 : 000005ea  r0 : 00000000
    Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
    Control: 10c53c7d  Table: 4248c059  DAC: 00000015
    Process klogd (pid: 2046, stack limit = 0x84eb02e8)
    [...]

    This is  because netdev_alloc_skb() fails and 'mdp-&gt;rx_skbuff[entry]' is left
    NULL but sh_eth_rx() later  uses it without checking.  Add such check...

    Reported-by: Yasushi SHOJI &lt;yashi@atmark-techno.com&gt;
    Signed-off-by: Sergei Shtylyov &lt;sergei.shtylyov@cogentembedded.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 0b15bc29250706ab64cbebb6a4739d3a76e23103
Author: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
Date:   Mon Dec 14 22:03:39 2015 +0100

    net: add validation for the socket syscall protocol argument

    [ Upstream commit 79462ad02e861803b3840cc782248c7359451cd9 ]

    郭永刚 reported that one could simply crash the kernel as root by
    using a simple program:

    	int socket_fd;
    	struct sockaddr_in addr;
    	addr.sin_port = 0;
    	addr.sin_addr.s_addr = INADDR_ANY;
    	addr.sin_family = 10;

    	socket_fd = socket(10,3,0x40000000);
    	connect(socket_fd , &amp;addr,16);

    AF_INET, AF_INET6 sockets actually only support 8-bit protocol
    identifiers. inet_sock's skc_protocol field thus is sized accordingly,
    thus larger protocol identifiers simply cut off the higher bits and
    store a zero in the protocol fields.

    This could lead to e.g. NULL function pointer because as a result of
    the cut off inet_num is zero and we call down to inet_autobind, which
    is NULL for raw sockets.

    kernel: Call Trace:
    kernel:  [&lt;ffffffff816db90e&gt;] ? inet_autobind+0x2e/0x70
    kernel:  [&lt;ffffffff816db9a4&gt;] inet_dgram_connect+0x54/0x80
    kernel:  [&lt;ffffffff81645069&gt;] SYSC_connect+0xd9/0x110
    kernel:  [&lt;ffffffff810ac51b&gt;] ? ptrace_notify+0x5b/0x80
    kernel:  [&lt;ffffffff810236d8&gt;] ? syscall_trace_enter_phase2+0x108/0x200
    kernel:  [&lt;ffffffff81645e0e&gt;] SyS_connect+0xe/0x10
    kernel:  [&lt;ffffffff81779515&gt;] tracesys_phase2+0x84/0x89

    I found no particular commit which introduced this problem.

    CVE: CVE-2015-8543
    Cc: Cong Wang &lt;cwang@twopensource.com&gt;
    Reported-by: 郭永刚 &lt;guoyonggang@360.cn&gt;
    Signed-off-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 62c8fcbdf619bf5c1c7f666cefefb88401904203
Author: Eric Dumazet &lt;edumazet@google.com&gt;
Date:   Wed Dec 9 07:25:06 2015 -0800

    ipv6: sctp: clone options to avoid use after free

    [ Upstream commit 9470e24f35ab81574da54e69df90c1eb4a96b43f ]

    SCTP is lacking proper np-&gt;opt cloning at accept() time.

    TCP and DCCP use ipv6_dup_options() helper, do the same
    in SCTP.

    We might later factorize this code in a common helper to avoid
    future mistakes.

    Reported-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
    Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
    Acked-by: Vlad Yasevich &lt;vyasevich@gmail.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 33fbe78ae82b7750da133439043847d0f79cb5ae
Author: Marcelo Ricardo Leitner &lt;marcelo.leitner@gmail.com&gt;
Date:   Fri Dec 4 15:14:04 2015 -0200

    sctp: update the netstamp_needed counter when copying sockets

    [ Upstream commit 01ce63c90170283a9855d1db4fe81934dddce648 ]

    Dmitry Vyukov reported that SCTP was triggering a WARN on socket destroy
    related to disabling sock timestamp.

    When SCTP accepts an association or peel one off, it copies sock flags
    but forgot to call net_enable_timestamp() if a packet timestamping flag
    was copied, leading to extra calls to net_disable_timestamp() whenever
    such clones were closed.

    The fix is to call net_enable_timestamp() whenever we copy a sock with
    that flag on, like tcp does.

    Reported-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
    Signed-off-by: Marcelo Ricardo Leitner &lt;marcelo.leitner@gmail.com&gt;
    Acked-by: Vlad Yasevich &lt;vyasevich@gmail.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit cbc3e98d4cba328bbb1aec5da784c5e84f601954
Author: Pavel Machek &lt;pavel@ucw.cz&gt;
Date:   Fri Dec 4 09:50:00 2015 +0100

    atl1c: Improve driver not to do order 4 GFP_ATOMIC allocation

    [ Upstream commit f2a3771ae8aca879c32336c76ad05a017629bae2 ]

    atl1c driver is doing order-4 allocation with GFP_ATOMIC
    priority. That often breaks  networking after resume. Switch to
    GFP_KERNEL. Still not ideal, but should be significantly better.

    atl1c_setup_ring_resources() is called from .open() function, and
    already uses GFP_KERNEL, so this change is safe.

    Signed-off-by: Pavel Machek &lt;pavel@ucw.cz&gt;
    Acked-by: Michal Hocko &lt;mhocko@suse.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 6089a80384074617cbe77ba8d315f24a7741a437
Author: Nicolas Dichtel &lt;nicolas.dichtel@6wind.com&gt;
Date:   Thu Dec 3 17:21:50 2015 +0100

    gre6: allow to update all parameters via rtnl

    [ Upstream commit 6a61d4dbf4f54b5683e0f1e58d873cecca7cb977 ]

    Parameters were updated only if the kernel was unable to find the tunnel
    with the new parameters, ie only if core pamareters were updated (keys,
    addr, link, type).
    Now it's possible to update ttl, hoplimit, flowinfo and flags.

    Fixes: c12b395a4664 ("gre: Support GRE over IPv6")
    Signed-off-by: Nicolas Dichtel &lt;nicolas.dichtel@6wind.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 7541d74e478278844cc643c9d7c4878dd51eae5e
Author: Ben Hutchings &lt;ben@decadent.org.uk&gt;
Date:   Wed Nov 18 02:01:21 2015 +0000

    usb: Use the USB_SS_MULT() macro to decode burst multiplier for log message

    commit 5377adb092664d336ac212499961cac5e8728794 upstream.

    usb_parse_ss_endpoint_companion() now decodes the burst multiplier
    correctly in order to check that it's &lt;= 3, but still uses the wrong
    expression if warning that it's &gt; 3.

    Fixes: ff30cbc8da42 ("usb: Use the USB_SS_MULT() macro to get the ...")
    Signed-off-by: Ben Hutchings &lt;ben@decadent.org.uk&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 42ef7474dcf3b8502dfa0dd9700caf1a6139d521
Author: Alexey Khoroshilov &lt;khoroshilov@ispras.ru&gt;
Date:   Sat Nov 21 00:36:44 2015 +0300

    USB: whci-hcd: add check for dma mapping error

    commit f9fa1887dcf26bd346665a6ae3d3f53dec54cba1 upstream.

    qset_fill_page_list() do not check for dma mapping errors.

    Found by Linux Driver Verification project (linuxtesting.org).

    Signed-off-by: Alexey Khoroshilov &lt;khoroshilov@ispras.ru&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 506d8269fb6184db68062df4d9fe787b95535ee4
Author: Alan Stern &lt;stern@rowland.harvard.edu&gt;
Date:   Thu Dec 10 15:27:21 2015 -0500

    USB: add quirk for devices with broken LPM

    commit ad87e03213b552a5c33d5e1e7a19a73768397010 upstream.

    Some USB device / host controller combinations seem to have problems
    with Link Power Management.  For example, Steinar found that his xHCI
    controller wouldn't handle bandwidth calculations correctly for two
    video cards simultaneously when LPM was enabled, even though the bus
    had plenty of bandwidth available.

    This patch introduces a new quirk flag for devices that should remain
    disabled for LPM, and creates quirk entries for Steinar's devices.

    Signed-off-by: Alan Stern &lt;stern@rowland.harvard.edu&gt;
    Reported-by: Steinar H. Gunderson &lt;sgunderson@bigfoot.com&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit e68f3e07d9f90b08083e903e24361241e0c9e0c7
Author: Konstantin Shkolnyy &lt;konstantin.shkolnyy@gmail.com&gt;
Date:   Tue Nov 10 16:40:13 2015 -0600

    USB: cp210x: Remove CP2110 ID from compatibility list

    commit 7c90e610b60cd1ed6abafd806acfaedccbbe52d1 upstream.

    CP2110 ID (0x10c4, 0xea80) doesn't belong here because it's a HID
    and completely different from CP210x devices.

    Signed-off-by: Konstantin Shkolnyy &lt;konstantin.shkolnyy@gmail.com&gt;
    Signed-off-by: Johan Hovold &lt;johan@kernel.org&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 7f877278601066e09833e1c3b47c483065ddc8fd
Author: Jonas Jonsson &lt;jonas@ludd.ltu.se&gt;
Date:   Sun Nov 22 11:47:17 2015 +0100

    USB: cdc_acm: Ignore Infineon Flash Loader utility

    commit f33a7f72e5fc033daccbb8d4753d7c5c41a4d67b upstream.

    Some modems, such as the Telit UE910, are using an Infineon Flash Loader
    utility. It has two interfaces, 2/2/0 (Abstract Modem) and 10/0/0 (CDC
    Data). The latter can be used as a serial interface to upgrade the
    firmware of the modem. However, that isn't possible when the cdc-acm
    driver takes control of the device.

    The following is an explanation of the behaviour by Daniele Palmas during
    discussion on linux-usb.

    "This is what happens when the device is turned on (without modifying
    the drivers):

    [155492.352031] usb 1-3: new high-speed USB device number 27 using ehci-pci
    [155492.485429] usb 1-3: config 1 interface 0 altsetting 0 endpoint 0x81 has an invalid bInterval 255, changing to 11
    [155492.485436] usb 1-3: New USB device found, idVendor=058b, idProduct=0041
    [155492.485439] usb 1-3: New USB device strings: Mfr=0, Product=0, SerialNumber=0
    [155492.485952] cdc_acm 1-3:1.0: ttyACM0: USB ACM device

    This is the flashing device that is caught by the cdc-acm driver. Once
    the ttyACM appears, the application starts sending a magic string
    (simple write on the file descriptor) to keep the device in flashing
    mode. If this magic string is not properly received in a certain time
    interval, the modem goes on in normal operative mode:

    [155493.748094] usb 1-3: USB disconnect, device number 27
    [155494.916025] usb 1-3: new high-speed USB device number 28 using ehci-pci
    [155495.059978] usb 1-3: New USB device found, idVendor=1bc7, idProduct=0021
    [155495.059983] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    [155495.059986] usb 1-3: Product: 6 CDC-ACM + 1 CDC-ECM
    [155495.059989] usb 1-3: Manufacturer: Telit
    [155495.059992] usb 1-3: SerialNumber: 359658044004697
    [155495.138958] cdc_acm 1-3:1.0: ttyACM0: USB ACM device
    [155495.140832] cdc_acm 1-3:1.2: ttyACM1: USB ACM device
    [155495.142827] cdc_acm 1-3:1.4: ttyACM2: USB ACM device
    [155495.144462] cdc_acm 1-3:1.6: ttyACM3: USB ACM device
    [155495.145967] cdc_acm 1-3:1.8: ttyACM4: USB ACM device
    [155495.147588] cdc_acm 1-3:1.10: ttyACM5: USB ACM device
    [155495.154322] cdc_ether 1-3:1.12 wwan0: register 'cdc_ether' at usb-0000:00:1a.7-3, Mobile Broadband Network Device, 00:00:11:12:13:14

    Using the cdc-acm driver, the string, though being sent in the same way
    than using the usb-serial-simple driver (I can confirm that the data is
    passing properly since I used an hw usb sniffer), does not make the
    device to stay in flashing mode."

    Signed-off-by: Jonas Jonsson &lt;jonas@ludd.ltu.se&gt;
    Tested-by: Daniele Palmas &lt;dnlplm@gmail.com&gt;
    Signed-off-by: Johan Hovold &lt;johan@kernel.org&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 7fdb403bf19da6702f3a37be080f1ccdb8572d08
Author: Jeff Layton &lt;jlayton@poochiereds.net&gt;
Date:   Wed Nov 25 13:50:11 2015 -0500

    nfs: if we have no valid attrs, then don't declare the attribute cache valid

    commit c812012f9ca7cf89c9e1a1cd512e6c3b5be04b85 upstream.

    If we pass in an empty nfs_fattr struct to nfs_update_inode, it will
    (correctly) not update any of the attributes, but it then clears the
    NFS_INO_INVALID_ATTR flag, which indicates that the attributes are
    up to date. Don't clear the flag if the fattr struct has no valid
    attrs to apply.

    Reviewed-by: Steve French &lt;steve.french@primarydata.com&gt;
    Signed-off-by: Jeff Layton &lt;jeff.layton@primarydata.com&gt;
    Signed-off-by: Trond Myklebust &lt;trond.myklebust@primarydata.com&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 308b77ea2d4add613708e2c82bc9f4d987095e12
Author: Benjamin Coddington &lt;bcodding@redhat.com&gt;
Date:   Fri Nov 20 09:56:20 2015 -0500

    nfs4: start callback_ident at idr 1

    commit c68a027c05709330fe5b2f50c50d5fa02124b5d8 upstream.

    If clp-&gt;cl_cb_ident is zero, then nfs_cb_idr_remove_locked() skips removing
    it when the nfs_client is freed.  A decoding or server bug can then find
    and try to put that first nfs_client which would lead to a crash.

    Signed-off-by: Benjamin Coddington &lt;bcodding@redhat.com&gt;
    Fixes: d6870312659d ("nfs4client: convert to idr_alloc()")
    Signed-off-by: Trond Myklebust &lt;trond.myklebust@primarydata.com&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit ef29913621a4fcfcf85d46935ddd4fb510f559bf
Author: Stefan Richter &lt;stefanr@s5r6.in-berlin.de&gt;
Date:   Tue Nov 3 01:46:21 2015 +0100

    firewire: ohci: fix JMicron JMB38x IT context discovery

    commit 100ceb66d5c40cc0c7018e06a9474302470be73c upstream.

    Reported by Clifford and Craig for JMicron OHCI-1394 + SDHCI combo
    controllers:  Often or even most of the time, the controller is
    initialized with the message "added OHCI v1.10 device as card 0, 4 IR +
    0 IT contexts, quirks 0x10".  With 0 isochronous transmit DMA contexts
    (IT contexts), applications like audio output are impossible.

    However, OHCI-1394 demands that at least 4 IT contexts are implemented
    by the link layer controller, and indeed JMicron JMB38x do implement
    four of them.  Only their IsoXmitIntMask register is unreliable at early
    access.

    With my own JMB381 single function controller I found:
      - I can reproduce the problem with a lower probability than Craig's.
      - If I put a loop around the section which clears and reads
        IsoXmitIntMask, then either the first or the second attempt will
        return the correct initial mask of 0x0000000f.  I never encountered
        a case of needing more than a second attempt.
      - Consequently, if I put a dummy reg_read(...IsoXmitIntMaskSet)
        before the first write, the subsequent read will return the correct
        result.
      - If I merely ignore a wrong read result and force the known real
        result, later isochronous transmit DMA usage works just fine.

    So let's just fix this chip bug up by the latter method.  Tested with
    JMB381 on kernel 3.13 and 4.3.

    Since OHCI-1394 generally requires 4 IT contexts at a minium, this
    workaround is simply applied whenever the initial read of IsoXmitIntMask
    returns 0, regardless whether it's a JMicron chip or not.  I never heard
    of this issue together with any other chip though.

    I am not 100% sure that this fix works on the OHCI-1394 part of JMB380
    and JMB388 combo controllers exactly the same as on the JMB381 single-
    function controller, but so far I haven't had a chance to let an owner
    of a combo chip run a patched kernel.

    Strangely enough, IsoRecvIntMask is always reported correctly, even
    though it is probed right before IsoXmitIntMask.

    Reported-by: Clifford Dunn
    Reported-by: Craig Moore &lt;craig.moore@qenos.com&gt;
    Signed-off-by: Stefan Richter &lt;stefanr@s5r6.in-berlin.de&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit fe4b6c2682109967c21ff28a47adfb5cb7d361aa
Author: Daeho Jeong &lt;daeho.jeong@samsung.com&gt;
Date:   Sun Oct 18 17:02:56 2015 -0400

    ext4, jbd2: ensure entering into panic after recording an error in superblock

    commit 4327ba52afd03fc4b5afa0ee1d774c9c5b0e85c5 upstream.

    If a EXT4 filesystem utilizes JBD2 journaling and an error occurs, the
    journaling will be aborted first and the error number will be recorded
    into JBD2 superblock and, finally, the system will enter into the
    panic state in "errors=panic" option.  But, in the rare case, this
    sequence is little twisted like the below figure and it will happen
    that the system enters into panic state, which means the system reset
    in mobile environment, before completion of recording an error in the
    journal superblock. In this case, e2fsck cannot recognize that the
    filesystem failure occurred in the previous run and the corruption
    wouldn't be fixed.

    Task A                        Task B
    ext4_handle_error()
    -&gt; jbd2_journal_abort()
      -&gt; __journal_abort_soft()
        -&gt; __jbd2_journal_abort_hard()
        | -&gt; journal-&gt;j_flags |= JBD2_ABORT;
        |
        |                         __ext4_abort()
        |                         -&gt; jbd2_journal_abort()
        |                         | -&gt; __journal_abort_soft()
        |                         |   -&gt; if (journal-&gt;j_flags &amp; JBD2_ABORT)
        |                         |           return;
        |                         -&gt; panic()
        |
        -&gt; jbd2_journal_update_sb_errno()

    Tested-by: Hobin Woo &lt;hobin.woo@samsung.com&gt;
    Signed-off-by: Daeho Jeong &lt;daeho.jeong@samsung.com&gt;
    Signed-off-by: Theodore Ts'o &lt;tytso@mit.edu&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit af8e014acf6baf20e4c1be0b0c472c9a9e1d3543
Author: Filipe Manana &lt;fdmanana@suse.com&gt;
Date:   Mon Nov 9 00:33:58 2015 +0000

    Btrfs: fix race leading to BUG_ON when running delalloc for nodatacow

    commit 1d512cb77bdbda80f0dd0620a3b260d697fd581d upstream.

    If we are using the NO_HOLES feature, we have a tiny time window when
    running delalloc for a nodatacow inode where we can race with a concurrent
    link or xattr add operation leading to a BUG_ON.

    This happens because at run_delalloc_nocow() we end up casting a leaf item
    of type BTRFS_INODE_[REF|EXTREF]_KEY or of type BTRFS_XATTR_ITEM_KEY to a
    file extent item (struct btrfs_file_extent_item) and then analyse its
    extent type field, which won't match any of the expected extent types
    (values BTRFS_FILE_EXTENT_[REG|PREALLOC|INLINE]) and therefore trigger an
    explicit BUG_ON(1).

    The following sequence diagram shows how the race happens when running a
    no-cow dellaloc range [4K, 8K[ for inode 257 and we have the following
    neighbour leafs:

                 Leaf X (has N items)                    Leaf Y

     [ ... (257 INODE_ITEM 0) (257 INODE_REF 256) ]  [ (257 EXTENT_DATA 8192), ... ]
                  slot N - 2         slot N - 1              slot 0

     (Note the implicit hole for inode 257 regarding the [0, 8K[ range)

           CPU 1                                         CPU 2

     run_dealloc_nocow()
       btrfs_lookup_file_extent()
         --&gt; searches for a key with value
             (257 EXTENT_DATA 4096) in the
             fs/subvol tree
         --&gt; returns us a path with
             path-&gt;nodes[0] == leaf X and
             path-&gt;slots[0] == N

       because path-&gt;slots[0] is &gt;=
       btrfs_header_nritems(leaf X), it
       calls btrfs_next_leaf()

       btrfs_next_leaf()
         --&gt; releases the path

                                                  hard link added to our inode,
                                                  with key (257 INODE_REF 500)
                                                  added to the end of leaf X,
                                                  so leaf X now has N + 1 keys

         --&gt; searches for the key
             (257 INODE_REF 256), because
             it was the last key in leaf X
             before it released the path,
             with path-&gt;keep_locks set to 1

         --&gt; ends up at leaf X again and
             it verifies that the key
             (257 INODE_REF 256) is no longer
             the last key in the leaf, so it
             returns with path-&gt;nodes[0] ==
             leaf X and path-&gt;slots[0] == N,
             pointing to the new item with
             key (257 INODE_REF 500)

       the loop iteration of run_dealloc_nocow()
       does not break out the loop and continues
       because the key referenced in the path
       at path-&gt;nodes[0] and path-&gt;slots[0] is
       for inode 257, its type is &lt; BTRFS_EXTENT_DATA_KEY
       and its offset (500) is less then our delalloc
       range's end (8192)

       the item pointed by the path, an inode reference item,
       is (incorrectly) interpreted as a file extent item and
       we get an invalid extent type, leading to the BUG_ON(1):

       if (extent_type == BTRFS_FILE_EXTENT_REG ||
          extent_type == BTRFS_FILE_EXTENT_PREALLOC) {
           (...)
       } else if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
           (...)
       } else {
           BUG_ON(1)
       }

    The same can happen if a xattr is added concurrently and ends up having
    a key with an offset smaller then the delalloc's range end.

    So fix this by skipping keys with a type smaller than
    BTRFS_EXTENT_DATA_KEY.

    Signed-off-by: Filipe Manana &lt;fdmanana@suse.com&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 622af8c8e93802e9ae2cdde93563c69a68feeccb
Author: Eric Dumazet &lt;edumazet@google.com&gt;
Date:   Tue Dec 1 07:20:07 2015 -0800

    ipv6: sctp: implement sctp_v6_destroy_sock()

    [ Upstream commit 602dd62dfbda3e63a2d6a3cbde953ebe82bf5087 ]

    Dmitry Vyukov reported a memory leak using IPV6 SCTP sockets.

    We need to call inet6_destroy_sock() to properly release
    inet6 specific fields.

    Reported-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
    Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
    Acked-by: Daniel Borkmann &lt;daniel@iogearbox.net&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 7cd9f6022097acdeb1f14bc9a5d44c40629d11a9
Author: Michal Kubeček &lt;mkubecek@suse.cz&gt;
Date:   Tue Nov 24 15:07:11 2015 +0100

    ipv6: distinguish frag queues by device for multicast and link-local packets

    [ Upstream commit 264640fc2c5f4f913db5c73fa3eb1ead2c45e9d7 ]

    If a fragmented multicast packet is received on an ethernet device which
    has an active macvlan on top of it, each fragment is duplicated and
    received both on the underlying device and the macvlan. If some
    fragments for macvlan are processed before the whole packet for the
    underlying device is reassembled, the "overlapping fragments" test in
    ip6_frag_queue() discards the whole fragment queue.

    To resolve this, add device ifindex to the search key and require it to
    match reassembling multicast packets and packets to link-local
    addresses.

    Note: similar patch has been already submitted by Yoshifuji Hideaki in

      http://patchwork.ozlabs.org/patch/220979/

    but got lost and forgotten for some reason.

    Signed-off-by: Michal Kubecek &lt;mkubecek@suse.cz&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit c5d998a60ac73841a42c0351e248a65747480b64
Author: Aaro Koskinen &lt;aaro.koskinen@iki.fi&gt;
Date:   Sun Nov 22 01:08:54 2015 +0200

    broadcom: fix PHY_ID_BCM5481 entry in the id table

    [ Upstream commit 3c25a860d17b7378822f35d8c9141db9507e3beb ]

    Commit fcb26ec5b18d ("broadcom: move all PHY_ID's to header")
    updated broadcom_tbl to use PHY_IDs, but incorrectly replaced 0x0143bca0
    with PHY_ID_BCM5482 (making a duplicate entry, and completely omitting
    the original). Fix that.

    Fixes: fcb26ec5b18d ("broadcom: move all PHY_ID's to header")
    Signed-off-by: Aaro Koskinen &lt;aaro.koskinen@iki.fi&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 07ea536a4530c41ff2d5266359b45eed2500e04f
Author: Nikolay Aleksandrov &lt;nikolay@cumulusnetworks.com&gt;
Date:   Fri Nov 20 13:54:20 2015 +0100

    net: ip6mr: fix static mfc/dev leaks on table destruction

    [ Upstream commit 4c6980462f32b4f282c5d8e5f7ea8070e2937725 ]

    Similar to ipv4, when destroying an mrt table the static mfc entries and
    the static devices are kept, which leads to devices that can never be
    destroyed (because of refcnt taken) and leaked memory. Make sure that
    everything is cleaned up on netns destruction.

    Fixes: 8229efdaef1e ("netns: ip6mr: enable namespace support in ipv6 multicast forwarding code")
    CC: Benjamin Thery &lt;benjamin.thery@bull.net&gt;
    Signed-off-by: Nikolay Aleksandrov &lt;nikolay@cumulusnetworks.com&gt;
    Reviewed-by: Cong Wang &lt;cwang@twopensource.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 5a88886f6bed598298f98b2657cd9df1a2104063
Author: Nikolay Aleksandrov &lt;nikolay@cumulusnetworks.com&gt;
Date:   Fri Nov 20 13:54:19 2015 +0100

    net: ipmr: fix static mfc/dev leaks on table destruction

    [ Upstream commit 0e615e9601a15efeeb8942cf7cd4dadba0c8c5a7 ]

    When destroying an mrt table the static mfc entries and the static
    devices are kept, which leads to devices that can never be destroyed
    (because of refcnt taken) and leaked memory, for example:
    unreferenced object 0xffff880034c144c0 (size 192):
      comm "mfc-broken", pid 4777, jiffies 4320349055 (age 46001.964s)
      hex dump (first 32 bytes):
        98 53 f0 34 00 88 ff ff 98 53 f0 34 00 88 ff ff  .S.4.....S.4....
        ef 0a 0a 14 01 02 03 04 00 00 00 00 01 00 00 00  ................
      backtrace:
        [&lt;ffffffff815c1b9e&gt;] kmemleak_alloc+0x4e/0xb0
        [&lt;ffffffff811ea6e0&gt;] kmem_cache_alloc+0x190/0x300
        [&lt;ffffffff815931cb&gt;] ip_mroute_setsockopt+0x5cb/0x910
        [&lt;ffffffff8153d575&gt;] do_ip_setsockopt.isra.11+0x105/0xff0
        [&lt;ffffffff8153e490&gt;] ip_setsockopt+0x30/0xa0
        [&lt;ffffffff81564e13&gt;] raw_setsockopt+0x33/0x90
        [&lt;ffffffff814d1e14&gt;] sock_common_setsockopt+0x14/0x20
        [&lt;ffffffff814d0b51&gt;] SyS_setsockopt+0x71/0xc0
        [&lt;ffffffff815cdbf6&gt;] entry_SYSCALL_64_fastpath+0x16/0x7a
        [&lt;ffffffffffffffff&gt;] 0xffffffffffffffff

    Make sure that everything is cleaned on netns destruction.

    Signed-off-by: Nikolay Aleksandrov &lt;nikolay@cumulusnetworks.com&gt;
    Reviewed-by: Cong Wang &lt;cwang@twopensource.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 40e1d40862d8fbe5198179804ccc5df9fa4d47b7
Author: Daniel Borkmann &lt;daniel@iogearbox.net&gt;
Date:   Fri Nov 20 00:11:56 2015 +0100

    net, scm: fix PaX detected msg_controllen overflow in scm_detach_fds

    [ Upstream commit 6900317f5eff0a7070c5936e5383f589e0de7a09 ]

    David and HacKurx reported a following/similar size overflow triggered
    in a grsecurity kernel, thanks to PaX's gcc size overflow plugin:

    (Already fixed in later grsecurity versions by Brad and PaX Team.)

    [ 1002.296137] PAX: size overflow detected in function scm_detach_fds net/core/scm.c:314
                   cicus.202_127 min, count: 4, decl: msg_controllen; num: 0; context: msghdr;
    [ 1002.296145] CPU: 0 PID: 3685 Comm: scm_rights_recv Not tainted 4.2.3-grsec+ #7
    [ 1002.296149] Hardware name: Apple Inc. MacBookAir5,1/Mac-66F35F19FE2A0D05, [...]
    [ 1002.296153]  ffffffff81c27366 0000000000000000 ffffffff81c27375 ffffc90007843aa8
    [ 1002.296162]  ffffffff818129ba 0000000000000000 ffffffff81c27366 ffffc90007843ad8
    [ 1002.296169]  ffffffff8121f838 fffffffffffffffc fffffffffffffffc ffffc90007843e60
    [ 1002.296176] Call Trace:
    [ 1002.296190]  [&lt;ffffffff818129ba&gt;] dump_stack+0x45/0x57
    [ 1002.296200]  [&lt;ffffffff8121f838&gt;] report_size_overflow+0x38/0x60
    [ 1002.296209]  [&lt;ffffffff816a979e&gt;] scm_detach_fds+0x2ce/0x300
    [ 1002.296220]  [&lt;ffffffff81791899&gt;] unix_stream_read_generic+0x609/0x930
    [ 1002.296228]  [&lt;ffffffff81791c9f&gt;] unix_stream_recvmsg+0x4f/0x60
    [ 1002.296236]  [&lt;ffffffff8178dc00&gt;] ? unix_set_peek_off+0x50/0x50
    [ 1002.296243]  [&lt;ffffffff8168fac7&gt;] sock_recvmsg+0x47/0x60
    [ 1002.296248]  [&lt;ffffffff81691522&gt;] ___sys_recvmsg+0xe2/0x1e0
    [ 1002.296257]  [&lt;ffffffff81693496&gt;] __sys_recvmsg+0x46/0x80
    [ 1002.296263]  [&lt;ffffffff816934fc&gt;] SyS_recvmsg+0x2c/0x40
    [ 1002.296271]  [&lt;ffffffff8181a3ab&gt;] entry_SYSCALL_64_fastpath+0x12/0x85

    Further investigation showed that this can happen when an *odd* number of
    fds are being passed over AF_UNIX sockets.

    In these cases CMSG_LEN(i * sizeof(int)) and CMSG_SPACE(i * sizeof(int)),
    where i is the number of successfully passed fds, differ by 4 bytes due
    to the extra CMSG_ALIGN() padding in CMSG_SPACE() to an 8 byte boundary
    on 64 bit. The padding is used to align subsequent cmsg headers in the
    control buffer.

    When the control buffer passed in from the receiver side *lacks* these 4
    bytes (e.g. due to buggy/wrong API usage), then msg-&gt;msg_controllen will
    overflow in scm_detach_fds():

      int cmlen = CMSG_LEN(i * sizeof(int));  &lt;--- cmlen w/o tail-padding
      err = put_user(SOL_SOCKET, &amp;cm-&gt;cmsg_level);
      if (!err)
        err = put_user(SCM_RIGHTS, &amp;cm-&gt;cmsg_type);
      if (!err)
        err = put_user(cmlen, &amp;cm-&gt;cmsg_len);
      if (!err) {
        cmlen = CMSG_SPACE(i * sizeof(int));  &lt;--- cmlen w/ 4 byte extra tail-padding
        msg-&gt;msg_control += cmlen;
        msg-&gt;msg_controllen -= cmlen;         &lt;--- iff no tail-padding space here ...
      }                                            ... wrap-around

    F.e. it will wrap to a length of 18446744073709551612 bytes in case the
    receiver passed in msg-&gt;msg_controllen of 20 bytes, and the sender
    properly transferred 1 fd to the receiver, so that its CMSG_LEN results
    in 20 bytes and CMSG_SPACE in 24 bytes.

    In case of MSG_CMSG_COMPAT (scm_detach_fds_compat()), I haven't seen an
    issue in my tests as alignment seems always on 4 byte boundary. Same
    should be in case of native 32 bit, where we end up with 4 byte boundaries
    as well.

    In practice, passing msg-&gt;msg_controllen of 20 to recvmsg() while receiving
    a single fd would mean that on successful return, msg-&gt;msg_controllen is
    being set by the kernel to 24 bytes instead, thus more than the input
    buffer advertised. It could f.e. become an issue if such application later
    on zeroes or copies the control buffer based on the returned msg-&gt;msg_controllen
    elsewhere.

    Maximum number of fds we can send is a hard upper limit SCM_MAX_FD (253).

    Going over the code, it seems like msg-&gt;msg_controllen is not being read
    after scm_detach_fds() in scm_recv() anymore by the kernel, good!

    Relevant recvmsg() handler are unix_dgram_recvmsg() (unix_seqpacket_recvmsg())
    and unix_stream_recvmsg(). Both return back to their recvmsg() caller,
    and ___sys_recvmsg() places the updated length, that is, new msg_control -
    old msg_control pointer into msg-&gt;msg_controllen (hence the 24 bytes seen
    in the example).

    Long time ago, Wei Yongjun fixed something related in commit 1ac70e7ad24a
    ("[NET]: Fix function put_cmsg() which may cause usr application memory
    overflow").

    RFC3542, section 20.2. says:

      The fields shown as "XX" are possible padding, between the cmsghdr
      structure and the data, and between the data and the next cmsghdr
      structure, if required by the implementation. While sending an
      application may or may not include padding at the end of last
      ancillary data in msg_controllen and implementations must accept both
      as valid. On receiving a portable application must provide space for
      padding at the end of the last ancillary data as implementations may
      copy out the padding at the end of the control message buffer and
      include it in the received msg_controllen. When recvmsg() is called
      if msg_controllen is too small for all the ancillary data items
      including any trailing padding after the last item an implementation
      may set MSG_CTRUNC.

    Since we didn't place MSG_CTRUNC for already quite a long time, just do
    the same as in 1ac70e7ad24a to avoid an overflow.

    Btw, even man-page author got this wrong :/ See db939c9b26e9 ("cmsg.3: Fix
    error in SCM_RIGHTS code sample"). Some people must have copied this (?),
    thus it got triggered in the wild (reported several times during boot by
    David and HacKurx).

    No Fixes tag this time as pre 2002 (that is, pre history tree).

    Reported-by: David Sterba &lt;dave@jikos.cz&gt;
    Reported-by: HacKurx &lt;hackurx@gmail.com&gt;
    Cc: PaX Team &lt;pageexec@freemail.hu&gt;
    Cc: Emese Revfy &lt;re.emese@gmail.com&gt;
    Cc: Brad Spengler &lt;spender@grsecurity.net&gt;
    Cc: Wei Yongjun &lt;yongjun_wei@trendmicro.com.cn&gt;
    Cc: Eric Dumazet &lt;edumazet@google.com&gt;
    Reviewed-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
    Signed-off-by: Daniel Borkmann &lt;daniel@iogearbox.net&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 3547cdcbe5212a5725441493c6fcf5f60ac4159f
Author: Eric Dumazet &lt;edumazet@google.com&gt;
Date:   Thu Nov 26 08:18:14 2015 -0800

    tcp: initialize tp-&gt;copied_seq in case of cross SYN connection

    [ Upstream commit 142a2e7ece8d8ac0e818eb2c91f99ca894730e2a ]

    Dmitry provided a syzkaller (http://github.com/google/syzkaller)
    generated program that triggers the WARNING at
    net/ipv4/tcp.c:1729 in tcp_recvmsg() :

    WARN_ON(tp-&gt;copied_seq != tp-&gt;rcv_nxt &amp;&amp;
            !(flags &amp; (MSG_PEEK | MSG_TRUNC)));

    His program is specifically attempting a Cross SYN TCP exchange,
    that we support (for the pleasure of hackers ?), but it looks we
    lack proper tcp-&gt;copied_seq initialization.

    Thanks again Dmitry for your report and testings.

    Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
    Reported-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
    Tested-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 98d2ffdc2c14d782d1b2982a5c05fb1f2f9eabe5
Author: Eric Dumazet &lt;edumazet@google.com&gt;
Date:   Wed Nov 18 12:40:13 2015 -0800

    tcp: md5: fix lockdep annotation

    [ Upstream commit 1b8e6a01e19f001e9f93b39c32387961c91ed3cc ]

    When a passive TCP is created, we eventually call tcp_md5_do_add()
    with sk pointing to the child. It is not owner by the user yet (we
    will add this socket into listener accept queue a bit later anyway)

    But we do own the spinlock, so amend the lockdep annotation to avoid
    following splat :

    [ 8451.090932] net/ipv4/tcp_ipv4.c:923 suspicious rcu_dereference_protected() usage!
    [ 8451.090932]
    [ 8451.090932] other info that might help us debug this:
    [ 8451.090932]
    [ 8451.090934]
    [ 8451.090934] rcu_scheduler_active = 1, debug_locks = 1
    [ 8451.090936] 3 locks held by socket_sockopt_/214795:
    [ 8451.090936]  #0:  (rcu_read_lock){.+.+..}, at: [&lt;ffffffff855c6ac1&gt;] __netif_receive_skb_core+0x151/0xe90
    [ 8451.090947]  #1:  (rcu_read_lock){.+.+..}, at: [&lt;ffffffff85618143&gt;] ip_local_deliver_finish+0x43/0x2b0
    [ 8451.090952]  #2:  (slock-AF_INET){+.-...}, at: [&lt;ffffffff855acda5&gt;] sk_clone_lock+0x1c5/0x500
    [ 8451.090958]
    [ 8451.090958] stack backtrace:
    [ 8451.090960] CPU: 7 PID: 214795 Comm: socket_sockopt_

    [ 8451.091215] Call Trace:
    [ 8451.091216]  &lt;IRQ&gt;  [&lt;ffffffff856fb29c&gt;] dump_stack+0x55/0x76
    [ 8451.091229]  [&lt;ffffffff85123b5b&gt;] lockdep_rcu_suspicious+0xeb/0x110
    [ 8451.091235]  [&lt;ffffffff8564544f&gt;] tcp_md5_do_add+0x1bf/0x1e0
    [ 8451.091239]  [&lt;ffffffff85645751&gt;] tcp_v4_syn_recv_sock+0x1f1/0x4c0
    [ 8451.091242]  [&lt;ffffffff85642b27&gt;] ? tcp_v4_md5_hash_skb+0x167/0x190
    [ 8451.091246]  [&lt;ffffffff85647c78&gt;] tcp_check_req+0x3c8/0x500
    [ 8451.091249]  [&lt;ffffffff856451ae&gt;] ? tcp_v4_inbound_md5_hash+0x11e/0x190
    [ 8451.091253]  [&lt;ffffffff85647170&gt;] tcp_v4_rcv+0x3c0/0x9f0
    [ 8451.091256]  [&lt;ffffffff85618143&gt;] ? ip_local_deliver_finish+0x43/0x2b0
    [ 8451.091260]  [&lt;ffffffff856181b6&gt;] ip_local_deliver_finish+0xb6/0x2b0
    [ 8451.091263]  [&lt;ffffffff85618143&gt;] ? ip_local_deliver_finish+0x43/0x2b0
    [ 8451.091267]  [&lt;ffffffff85618d38&gt;] ip_local_deliver+0x48/0x80
    [ 8451.091270]  [&lt;ffffffff85618510&gt;] ip_rcv_finish+0x160/0x700
    [ 8451.091273]  [&lt;ffffffff8561900e&gt;] ip_rcv+0x29e/0x3d0
    [ 8451.091277]  [&lt;ffffffff855c74b7&gt;] __netif_receive_skb_core+0xb47/0xe90

    Fixes: a8afca0329988 ("tcp: md5: protects md5sig_info with RCU")
    Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
    Reported-by: Willem de Bruijn &lt;willemb@google.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit c5806c7c2c703a2f3a879c2e3399529333a2b349
Author: Bjørn Mork &lt;bjorn@mork.no&gt;
Date:   Wed Nov 18 21:13:07 2015 +0100

    net: qmi_wwan: add XS Stick W100-2 from 4G Systems

    [ Upstream commit 68242a5a1e2edce39b069385cbafb82304eac0f1 ]

    Thomas reports
    "
    4gsystems sells two total different LTE-surfsticks under the same name.
    ..
    The newer version of XS Stick W100 is from "omega"
    ..
    Under windows the driver switches to the same ID, and uses MI03\6 for
    network and MI01\6 for modem.
    ..
    echo "1c9e 9b01" &gt; /sys/bus/usb/drivers/qmi_wwan/new_id
    echo "1c9e 9b01" &gt; /sys/bus/usb-serial/drivers/option1/new_id

    T:  Bus=01 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#=  4 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(&gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1c9e ProdID=9b01 Rev=02.32
    S:  Manufacturer=USB Modem
    S:  Product=USB Modem
    S:  SerialNumber=
    C:  #Ifs= 5 Cfg#= 1 Atr=80 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage

    Now all important things are there:

    wwp0s29f7u2i3 (net), ttyUSB2 (at), cdc-wdm0 (qmi), ttyUSB1 (at)

    There is also ttyUSB0, but it is not usable, at least not for at.

    The device works well with qmi and ModemManager-NetworkManager.
    "

    Reported-by: Thomas Schäfer &lt;tschaefer@t-online.de&gt;
    Signed-off-by: Bjørn Mork &lt;bjorn@mork.no&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 08f97ac765394b2370c311be1930553cd27d9245
Author: Neil Horman &lt;nhorman@tuxdriver.com&gt;
Date:   Mon Nov 16 13:09:10 2015 -0500

    snmp: Remove duplicate OUTMCAST stat increment

    [ Upstream commit 41033f029e393a64e81966cbe34d66c6cf8a2e7e ]

    the OUTMCAST stat is double incremented, getting bumped once in the mcast code
    itself, and again in the common ip output path.  Remove the mcast bump, as its
    not needed

    Validated by the reporter, with good results

    Signed-off-by: Neil Horman &lt;nhorman@tuxdriver.com&gt;
    Reported-by: Claus Jensen &lt;claus.jensen@microsemi.com&gt;
    CC: Claus Jensen &lt;claus.jensen@microsemi.com&gt;
    CC: David Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 3fb28c97238bc1ddd66229bb6d2bc07b2452c6ab
Author: lucien &lt;lucien.xin@gmail.com&gt;
Date:   Thu Nov 12 13:07:07 2015 +0800

    sctp: translate host order to network order when setting a hmacid

    [ Upstream commit ed5a377d87dc4c87fb3e1f7f698cba38cd893103 ]

    now sctp auth cannot work well when setting a hmacid manually, which
    is caused by that we didn't use the network order for hmacid, so fix
    it by adding the transformation in sctp_auth_ep_set_hmacs.

    even we set hmacid with the network order in userspace, it still
    can't work, because of this condition in sctp_auth_ep_set_hmacs():

    		if (id &gt; SCTP_AUTH_HMAC_ID_MAX)
    			return -EOPNOTSUPP;

    so this wasn't working before and thus it won't break compatibility.

    Fixes: 65b07e5d0d09 ("[SCTP]: API updates to suport SCTP-AUTH extensions.")
    Signed-off-by: Xin Long &lt;lucien.xin@gmail.com&gt;
    Signed-off-by: Marcelo Ricardo Leitner &lt;marcelo.leitner@gmail.com&gt;
    Acked-by: Neil Horman &lt;nhorman@tuxdriver.com&gt;
    Acked-by: Vlad Yasevich &lt;vyasevich@gmail.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit da8db0830a2ce63f628150307a01a315f5081202
Author: Rainer Weikusat &lt;rweikusat@mobileactivedefense.com&gt;
Date:   Fri Nov 20 22:07:23 2015 +0000

    unix: avoid use-after-free in ep_remove_wait_queue

    [ Upstream commit 7d267278a9ece963d77eefec61630223fce08c6c ]

    Rainer Weikusat &lt;rweikusat@mobileactivedefense.com&gt; writes:
    An AF_UNIX datagram socket being the client in an n:1 association with
    some server socket is only allowed to send messages to the server if the
    receive queue of this socket contains at most sk_max_ack_backlog
    datagrams. This implies that prospective writers might be forced to go
    to sleep despite none of the message presently enqueued on the server
    receive queue were sent by them. In order to ensure that these will be
    woken up once space becomes again available, the present unix_dgram_poll
    routine does a second sock_poll_wait call with the peer_wait wait queue
    of the server socket as queue argument (unix_dgram_recvmsg does a wake
    up on this queue after a datagram was received). This is inherently
    problematic because the server socket is only guaranteed to remain alive
    for as long as the client still holds a reference to it. In case the
    connection is dissolved via connect or by the dead peer detection logic
    in unix_dgram_sendmsg, the server socket may be freed despite "the
    polling mechanism" (in particular, epoll) still has a pointer to the
    corresponding peer_wait queue. There's no way to forcibly deregister a
    wait queue with epoll.

    Based on an idea by Jason Baron, the patch below changes the code such
    that a wait_queue_t belonging to the client socket is enqueued on the
    peer_wait queue of the server whenever the peer receive queue full
    condition is detected by either a sendmsg or a poll. A wake up on the
    peer queue is then relayed to the ordinary wait queue of the client
    socket via wake function. The connection to the peer wait queue is again
    dissolved if either a wake up is about to be relayed or the client
    socket reconnects or a dead peer is detected or the client socket is
    itself closed. This enables removing the second sock_poll_wait from
    unix_dgram_poll, thus avoiding the use-after-free, while still ensuring
    that no blocked writer sleeps forever.

    Signed-off-by: Rainer Weikusat &lt;rweikusat@mobileactivedefense.com&gt;
    Fixes: ec0d215f9420 ("af_unix: fix 'poll for write'/connected DGRAM sockets")
    Reviewed-by: Jason Baron &lt;jbaron@akamai.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>Linux 3.10.94</title>
<updated>2016-08-26T18:47:10+00:00</updated>
<author>
<name>Stefan Guendhoer</name>
<email>stefan@guendhoer.com</email>
</author>
<published>2016-01-13T04:17:44+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/android_kernel_m2note/commit/?id=c159c85a46937d2c2650e4376849f1670c6c2da6'/>
<id>urn:sha1:c159c85a46937d2c2650e4376849f1670c6c2da6</id>
<content type='text'>
commit 03ed106ff4c200d01f3c72f71fa9c5b18da07d9b
Author: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
Date:   Wed Dec 9 13:43:21 2015 -0500

    Linux 3.10.94

commit 82dbfa50b0ee671e40779541a6ceef0850d19c84
Author: Clemens Ladisch &lt;clemens@ladisch.de&gt;
Date:   Sun Nov 15 22:39:08 2015 +0100

    ALSA: usb-audio: work around CH345 input SysEx corruption

    commit a91e627e3f0ed820b11d86cdc04df38f65f33a70 upstream.

    One of the many faults of the QinHeng CH345 USB MIDI interface chip is
    that it does not handle received SysEx messages correctly -- every second
    event packet has a wrong code index number, which is the one from the last
    seen message, instead of 4.  For example, the two messages "FE F0 01 02 03
    04 05 06 07 08 09 0A 0B 0C 0D 0E F7" result in the following event
    packets:

    correct:       CH345:
    0F FE 00 00    0F FE 00 00
    04 F0 01 02    04 F0 01 02
    04 03 04 05    0F 03 04 05
    04 06 07 08    04 06 07 08
    04 09 0A 0B    0F 09 0A 0B
    04 0C 0D 0E    04 0C 0D 0E
    05 F7 00 00    05 F7 00 00

    A class-compliant driver must interpret an event packet with CIN 15 as
    having a single data byte, so the other two bytes would be ignored.  The
    message received by the host would then be missing two bytes out of six;
    in this example, "F0 01 02 03 06 07 08 09 0C 0D 0E F7".

    These corrupted SysEx event packages contain only data bytes, while the
    CH345 uses event packets with a correct CIN value only for messages with
    a status byte, so it is possible to distinguish between these two cases by
    checking for the presence of this status byte.

    (Other bugs in the CH345's input handling, such as the corruption resulting
    from running status, cannot be worked around.)

    Signed-off-by: Clemens Ladisch &lt;clemens@ladisch.de&gt;
    Signed-off-by: Takashi Iwai &lt;tiwai@suse.de&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 88ab73208769677b3935d747a43aab1213d15d39
Author: Clemens Ladisch &lt;clemens@ladisch.de&gt;
Date:   Sun Nov 15 22:38:29 2015 +0100

    ALSA: usb-audio: prevent CH345 multiport output SysEx corruption

    commit 1ca8b201309d842642f221db7f02f71c0af5be2d upstream.

    The CH345 USB MIDI chip has two output ports.  However, they are
    multiplexed through one pin, and the number of ports cannot be reduced
    even for hardware that implements only one connector, so for those
    devices, data sent to either port ends up on the same hardware output.
    This becomes a problem when both ports are used at the same time, as
    longer MIDI commands (such as SysEx messages) are likely to be
    interrupted by messages from the other port, and thus to get lost.

    It would not be possible for the driver to detect how many ports the
    device actually has, except that in practice, _all_ devices built with
    the CH345 have only one port.  So we can just ignore the device's
    descriptors, and hardcode one output port.

    Signed-off-by: Clemens Ladisch &lt;clemens@ladisch.de&gt;
    Signed-off-by: Takashi Iwai &lt;tiwai@suse.de&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 5d39c9b60cfd2381737cdeb5a74bd79d4b27e84c
Author: Clemens Ladisch &lt;clemens@ladisch.de&gt;
Date:   Sun Nov 15 22:37:44 2015 +0100

    ALSA: usb-audio: add packet size quirk for the Medeli DD305

    commit 98d362becb6621bebdda7ed0eac7ad7ec6c37898 upstream.

    Signed-off-by: Clemens Ladisch &lt;clemens@ladisch.de&gt;
    Signed-off-by: Takashi Iwai &lt;tiwai@suse.de&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 53009ce204642c3191d6f4d773d28c80f0c27971
Author: Bjørn Mork &lt;bjorn@mork.no&gt;
Date:   Wed Nov 18 21:12:33 2015 +0100

    USB: option: add XS Stick W100-2 from 4G Systems

    commit 638148e20c7f8f6e95017fdc13bce8549a6925e0 upstream.

    Thomas reports
    "
    4gsystems sells two total different LTE-surfsticks under the same name.
    ..
    The newer version of XS Stick W100 is from "omega"
    ..
    Under windows the driver switches to the same ID, and uses MI03\6 for
    network and MI01\6 for modem.
    ..
    echo "1c9e 9b01" &gt; /sys/bus/usb/drivers/qmi_wwan/new_id
    echo "1c9e 9b01" &gt; /sys/bus/usb-serial/drivers/option1/new_id

    T:  Bus=01 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#=  4 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(&gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1c9e ProdID=9b01 Rev=02.32
    S:  Manufacturer=USB Modem
    S:  Product=USB Modem
    S:  SerialNumber=
    C:  #Ifs= 5 Cfg#= 1 Atr=80 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage

    Now all important things are there:

    wwp0s29f7u2i3 (net), ttyUSB2 (at), cdc-wdm0 (qmi), ttyUSB1 (at)

    There is also ttyUSB0, but it is not usable, at least not for at.

    The device works well with qmi and ModemManager-NetworkManager.
    "

    Reported-by: Thomas Schäfer &lt;tschaefer@t-online.de&gt;
    Signed-off-by: Bjørn Mork &lt;bjorn@mork.no&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit b2dbbdda6605358caeed741f51101395991dda5f
Author: Aleksander Morgado &lt;aleksander@aleksander.es&gt;
Date:   Wed Nov 11 19:51:40 2015 +0100

    USB: serial: option: add support for Novatel MiFi USB620L

    commit e07af133c3e2716db25e3e1e1d9f10c2088e9c1a upstream.

    Also known as Verizon U620L.

    The device is modeswitched from 1410:9020 to 1410:9022 by selecting the
    4th USB configuration:

     $ sudo usb_modeswitch –v 0x1410 –p 0x9020 –u 4

    This configuration provides a ECM interface as well as TTYs ('Enterprise
    Mode' according to the U620 Linux integration guide).

    Signed-off-by: Aleksander Morgado &lt;aleksander@aleksander.es&gt;
    Signed-off-by: Johan Hovold &lt;johan@kernel.org&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 9a960144742c6b57a17e8fd0df982b9ea28ae3c9
Author: Uwe Kleine-König &lt;u.kleine-koenig@pengutronix.de&gt;
Date:   Fri Oct 23 09:53:50 2015 +0200

    usb: musb: core: fix order of arguments to ulpi write callback

    commit 705e63d2b29c8bbf091119084544d353bda70393 upstream.

    There is a bit of a mess in the order of arguments to the ulpi write
    callback. There is

    	int ulpi_write(struct ulpi *ulpi, u8 addr, u8 val)

    in drivers/usb/common/ulpi.c;

    	struct usb_phy_io_ops {
    		...
    		int (*write)(struct usb_phy *x, u32 val, u32 reg);
    	}

    in include/linux/usb/phy.h.

    The callback registered by the musb driver has to comply to the latter,
    but up to now had "offset" first which effectively made the function
    broken for correct users. So flip the order and while at it also
    switch to the parameter names of struct usb_phy_io_ops's write.

    Fixes: ffb865b1e460 ("usb: musb: add ulpi access operations")
    Signed-off-by: Uwe Kleine-König &lt;u.kleine-koenig@pengutronix.de&gt;
    Signed-off-by: Felipe Balbi &lt;balbi@ti.com&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 2391fbf63585c3befa63a4780f470cf59539a6f7
Author: Jiri Slaby &lt;jslaby@suse.cz&gt;
Date:   Mon Nov 2 10:27:00 2015 +0100

    usblp: do not set TASK_INTERRUPTIBLE before lock

    commit 19cd80a214821f4b558560ebd76bfb2c38b4f3d8 upstream.

    It is not permitted to set task state before lock. usblp_wwait sets
    the state to TASK_INTERRUPTIBLE and calls mutex_lock_interruptible.
    Upon return from that function, the state will be TASK_RUNNING again.

    This is clearly a bug and a warning is generated with LOCKDEP too:
    WARNING: CPU: 1 PID: 5109 at kernel/sched/core.c:7404 __might_sleep+0x7d/0x90()
    do not call blocking ops when !TASK_RUNNING; state=1 set at [&lt;ffffffffa0c588d0&gt;] usblp_wwait+0xa0/0x310 [usblp]
    Modules linked in: ...
    CPU: 1 PID: 5109 Comm: captmon Tainted: G        W       4.2.5-0.gef2823b-default #1
    Hardware name: LENOVO 23252SG/23252SG, BIOS G2ET33WW (1.13 ) 07/24/2012
     ffffffff81a4edce ffff880236ec7ba8 ffffffff81716651 0000000000000000
     ffff880236ec7bf8 ffff880236ec7be8 ffffffff8106e146 0000000000000282
     ffffffff81a50119 000000000000028b 0000000000000000 ffff8802dab7c508
    Call Trace:
    ...
     [&lt;ffffffff8106e1c6&gt;] warn_slowpath_fmt+0x46/0x50
     [&lt;ffffffff8109a8bd&gt;] __might_sleep+0x7d/0x90
     [&lt;ffffffff8171b20f&gt;] mutex_lock_interruptible_nested+0x2f/0x4b0
     [&lt;ffffffffa0c588fc&gt;] usblp_wwait+0xcc/0x310 [usblp]
     [&lt;ffffffffa0c58bb2&gt;] usblp_write+0x72/0x350 [usblp]
     [&lt;ffffffff8121ed98&gt;] __vfs_write+0x28/0xf0
    ...

    Commit 7f477358e2384c54b190cc3b6ce28277050a041b (usblp: Implement the
    ENOSPC convention) moved the set prior locking. So move it back after
    the lock.

    Signed-off-by: Jiri Slaby &lt;jslaby@suse.cz&gt;
    Fixes: 7f477358e2 ("usblp: Implement the ENOSPC convention")
    Acked-By: Pete Zaitcev &lt;zaitcev@yahoo.com&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit b2a5b5964748a5a25a28652f4ea4223a534a4c86
Author: Robin Murphy &lt;robin.murphy@arm.com&gt;
Date:   Thu Oct 22 15:41:52 2015 +0100

    arm64: Fix compat register mappings

    commit 5accd17d0eb523350c9ef754d655e379c9bb93b3 upstream.

    For reasons not entirely apparent, but now enshrined in history, the
    architectural mapping of AArch32 banked registers to AArch64 registers
    actually orders SP_&lt;mode&gt; and LR_&lt;mode&gt; backwards compared to the
    intuitive r13/r14 order, for all modes except FIQ.

    Fix the compat_&lt;reg&gt;_&lt;mode&gt; macros accordingly, in the hope of avoiding
    subtle bugs with KVM and AArch32 guests.

    Signed-off-by: Robin Murphy &lt;robin.murphy@arm.com&gt;
    Acked-by: Will Deacon &lt;will.deacon@arm.com&gt;
    Signed-off-by: Catalin Marinas &lt;catalin.marinas@arm.com&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 3b792c868153a9911e46ec3069b7b94e7cc5c6c6
Author: Mirza Krak &lt;mirza.krak@hostmobility.com&gt;
Date:   Tue Nov 10 14:59:34 2015 +0100

    can: sja1000: clear interrupts on start

    commit 7cecd9ab80f43972c056dc068338f7bcc407b71c upstream.

    According to SJA1000 data sheet error-warning (EI) interrupt is not
    cleared by setting the controller in to reset-mode.

    Then if we have the following case:
    - system is suspended (echo mem &gt; /sys/power/state) and SJA1000 is left
      in operating state
    - A bus error condition occurs which activates EI interrupt, system is
      still suspended which means EI interrupt will be not be handled nor
      cleared.

    If the above two events occur, on resume there is no way to return the
    SJA1000 to operating state, except to cycle power to it.

    By simply reading the IR register on start we will clear any previous
    conditions that could be present.

    Signed-off-by: Mirza Krak &lt;mirza.krak@hostmobility.com&gt;
    Reported-by: Christian Magnusson &lt;Christian.Magnusson@semcon.com&gt;
    Signed-off-by: Marc Kleine-Budde &lt;mkl@pengutronix.de&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit c45820774f2d7f3196c7ad371b026c2b6e93c9a7
Author: David Herrmann &lt;dh.herrmann@gmail.com&gt;
Date:   Mon Sep 7 12:05:41 2015 +0200

    Bluetooth: hidp: fix device disconnect on idle timeout

    commit 660f0fc07d21114549c1862e67e78b1cf0c90c29 upstream.

    The HIDP specs define an idle-timeout which automatically disconnects a
    device. This has always been implemented in the HIDP layer and forced a
    synchronous shutdown of the hidp-scheduler. This works just fine, but
    lacks a forced disconnect on the underlying l2cap channels. This has been
    broken since:

        commit 5205185d461d5902325e457ca80bd421127b7308
        Author: David Herrmann &lt;dh.herrmann@gmail.com&gt;
        Date:   Sat Apr 6 20:28:47 2013 +0200

            Bluetooth: hidp: remove old session-management

    The old session-management always forced an l2cap error on the ctrl/intr
    channels when shutting down. The new session-management skips this, as we
    don't want to enforce channel policy on the caller. In other words, if
    user-space removes an HIDP device, the underlying channels (which are
    *owned* and *referenced* by user-space) are still left active. User-space
    needs to call shutdown(2) or close(2) to release them.

    Unfortunately, this does not work with idle-timeouts. There is no way to
    signal user-space that the HIDP layer has been stopped. The API simply
    does not support any event-passing except for poll(2). Hence, we restore
    old behavior and force EUNATCH on the sockets if the HIDP layer is
    disconnected due to idle-timeouts (behavior of explicit disconnects
    remains unmodified). User-space can still call

        getsockopt(..., SO_ERROR, ...)

    ..to retrieve the EUNATCH error and clear sk_err. Hence, the channels can
    still be re-used (which nobody does so far, though). Therefore, the API
    still supports the new behavior, but with this patch it's also compatible
    to the old implicit channel shutdown.

    Reported-by: Mark Haun &lt;haunma@keteu.org&gt;
    Reported-by: Luiz Augusto von Dentz &lt;luiz.dentz@gmail.com&gt;
    Signed-off-by: David Herrmann &lt;dh.herrmann@gmail.com&gt;
    Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 9babe681a7554368197bc33b33eaea6ec3112f51
Author: Larry Finger &lt;Larry.Finger@lwfinger.net&gt;
Date:   Sun Oct 18 22:14:48 2015 -0500

    staging: rtl8712: Add device ID for Sitecom WLA2100

    commit 1e6e63283691a2a9048a35d9c6c59cf0abd342e4 upstream.

    This adds the USB ID for the Sitecom WLA2100. The Windows 10 inf file
    was checked to verify that the addition is correct.

    Reported-by: Frans van de Wiel &lt;fvdw@fvdw.eu&gt;
    Signed-off-by: Larry Finger &lt;Larry.Finger@lwfinger.net&gt;
    Cc: Frans van de Wiel &lt;fvdw@fvdw.eu&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 95563ce161961fbdf5df6d2b2df0d8ee5cf660c9
Author: Dan Carpenter &lt;dan.carpenter@oracle.com&gt;
Date:   Mon Sep 21 19:19:53 2015 +0300

    mwifiex: fix mwifiex_rdeeprom_read()

    commit 1f9c6e1bc1ba5f8a10fcd6e99d170954d7c6d382 upstream.

    There were several bugs here.

    1)  The done label was in the wrong place so we didn't copy any
        information out when there was no command given.

    2)  We were using PAGE_SIZE as the size of the buffer instead of
        "PAGE_SIZE - pos".

    3)  snprintf() returns the number of characters that would have been
        printed if there were enough space.  If there was not enough space
        (and we had fixed the memory corruption bug #2) then it would result
        in an information leak when we do simple_read_from_buffer().  I've
        changed it to use scnprintf() instead.

    I also removed the initialization at the start of the function, because
    I thought it made the code a little more clear.

    Fixes: 5e6e3a92b9a4 ('wireless: mwifiex: initial commit for Marvell mwifiex driver')
    Signed-off-by: Dan Carpenter &lt;dan.carpenter@oracle.com&gt;
    Acked-by: Amitkumar Karwar &lt;akarwar@marvell.com&gt;
    Signed-off-by: Kalle Valo &lt;kvalo@codeaurora.org&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit dde9eef8c909fac6f2bac664598a1b8553bbb003
Author: Maxime Ripard &lt;maxime.ripard@free-electrons.com&gt;
Date:   Fri Sep 25 18:09:35 2015 +0200

    net: mvneta: Fix CPU_MAP registers initialisation

    commit 2502d0ef272da7058ef303b849a2c8dc324c2e2e upstream.

    The CPU_MAP register is duplicated for each CPUs at different addresses,
    each instance being at a different address.

    However, the code so far was using CONFIG_NR_CPUS to initialise the CPU_MAP
    registers for each registers, while the SoCs embed at most 4 CPUs.

    This is especially an issue with multi_v7_defconfig, where CONFIG_NR_CPUS
    is currently set to 16, resulting in writes to registers that are not
    CPU_MAP.

    Fixes: c5aff18204da ("net: mvneta: driver for Marvell Armada 370/XP network unit")
    Signed-off-by: Maxime Ripard &lt;maxime.ripard@free-electrons.com&gt;
    Signed-off-by: Gregory CLEMENT &lt;gregory.clement@free-electrons.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit ad9550e54d1bb06eb91100e0b8129b77015943b7
Author: Johannes Berg &lt;johannes.berg@intel.com&gt;
Date:   Fri Aug 28 10:52:53 2015 +0200

    mac80211: fix driver RSSI event calculations

    commit 8ec6d97871f37e4743678ea4a455bd59580aa0f4 upstream.

    The ifmgd-&gt;ave_beacon_signal value cannot be taken as is for
    comparisons, it must be divided by since it's represented
    like that for better accuracy of the EWMA calculations. This
    would lead to invalid driver RSSI events. Fix the used value.

    Fixes: 615f7b9bb1f8 ("mac80211: add driver RSSI threshold events")
    Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 8fa88fa8503eba326e6ddf47e3ec1f71d6997dc0
Author: Andrew Cooper &lt;andrew.cooper3@citrix.com&gt;
Date:   Wed Jun 3 10:31:14 2015 +0100

    x86/cpu: Fix SMAP check in PVOPS environments

    commit 581b7f158fe0383b492acd1ce3fb4e99d4e57808 upstream.

    There appears to be no formal statement of what pv_irq_ops.save_fl() is
    supposed to return precisely.  Native returns the full flags, while lguest and
    Xen only return the Interrupt Flag, and both have comments by the
    implementations stating that only the Interrupt Flag is looked at.  This may
    have been true when initially implemented, but no longer is.

    To make matters worse, the Xen PVOP leaves the upper bits undefined, making
    the BUG_ON() undefined behaviour.  Experimentally, this now trips for 32bit PV
    guests on Broadwell hardware.  The BUG_ON() is consistent for an individual
    build, but not consistent for all builds.  It has also been a sitting timebomb
    since SMAP support was introduced.

    Use native_save_fl() instead, which will obtain an accurate view of the AC
    flag.

    Signed-off-by: Andrew Cooper &lt;andrew.cooper3@citrix.com&gt;
    Reviewed-by: David Vrabel &lt;david.vrabel@citrix.com&gt;
    Tested-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
    Cc: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
    Cc: Konrad Rzeszutek Wilk &lt;konrad.wilk@oracle.com&gt;
    Cc: Boris Ostrovsky &lt;boris.ostrovsky@oracle.com&gt;
    Cc: &lt;lguest@lists.ozlabs.org&gt;
    Cc: Xen-devel &lt;xen-devel@lists.xen.org&gt;
    Link: http://lkml.kernel.org/r/1433323874-6927-1-git-send-email-andrew.cooper3@citrix.com
    Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 8f14777b580d064a80f0adac4c2596d24a196205
Author: Borislav Petkov &lt;bp@suse.de&gt;
Date:   Thu Nov 5 16:57:56 2015 +0100

    x86/cpu: Call verify_cpu() after having entered long mode too

    commit 04633df0c43d710e5f696b06539c100898678235 upstream.

    When we get loaded by a 64-bit bootloader, kernel entry point is
    startup_64 in head_64.S. We don't trust any and all bootloaders because
    some will fiddle with CPU configuration so we go ahead and massage each
    CPU into sanity again.

    For example, some dell BIOSes have this XD disable feature which set
    IA32_MISC_ENABLE[34] and disable NX. This might be some dumb workaround
    for other OSes but Linux sure doesn't need it.

    A similar thing is present in the Surface 3 firmware - see
    https://bugzilla.kernel.org/show_bug.cgi?id=106051 - which sets this bit
    only on the BSP:

      # rdmsr -a 0x1a0
      400850089
      850089
      850089
      850089

    I know, right?!

    There's not even an off switch in there.

    So fix all those cases by sanitizing the 64-bit entry point too. For
    that, make verify_cpu() callable in 64-bit mode also.

    Requested-and-debugged-by: "H. Peter Anvin" &lt;hpa@zytor.com&gt;
    Reported-and-tested-by: Bastien Nocera &lt;bugzilla@hadess.net&gt;
    Signed-off-by: Borislav Petkov &lt;bp@suse.de&gt;
    Cc: Matt Fleming &lt;matt@codeblueprint.co.uk&gt;
    Cc: Peter Zijlstra &lt;peterz@infradead.org&gt;
    Link: http://lkml.kernel.org/r/1446739076-21303-1-git-send-email-bp@alien8.de
    Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 308b1b04336a71008b9b9d143506625d4c653751
Author: Krzysztof Mazur &lt;krzysiek@podlesie.net&gt;
Date:   Fri Nov 6 14:18:36 2015 +0100

    x86/setup: Fix low identity map for &gt;= 2GB kernel range

    commit 68accac392d859d24adcf1be3a90e41f978bd54c upstream.

    The commit f5f3497cad8c extended the low identity mapping. However, if
    the kernel uses more than 2 GB (VMSPLIT_2G_OPT or VMSPLIT_1G memory
    split), the normal memory mapping is overwritten by the low identity
    mapping causing a crash. To avoid overwritting, limit the low identity
    map to cover only memory before kernel range (PAGE_OFFSET).

    Fixes: f5f3497cad8c "x86/setup: Extend low identity map to cover whole kernel range
    Signed-off-by: Krzysztof Mazur &lt;krzysiek@podlesie.net&gt;
    Cc: Andy Lutomirski &lt;luto@amacapital.net&gt;
    Cc: Borislav Petkov &lt;bp@alien8.de&gt;
    Cc: Laszlo Ersek &lt;lersek@redhat.com&gt;
    Cc: Matt Fleming &lt;matt.fleming@intel.com&gt;
    Cc: Paolo Bonzini &lt;pbonzini@redhat.com&gt;
    Link: http://lkml.kernel.org/r/1446815916-22105-1-git-send-email-krzysiek@podlesie.net
    Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit fa4fbf71380d21a54e25b66e77b9700184c0ef91
Author: Paolo Bonzini &lt;pbonzini@redhat.com&gt;
Date:   Wed Oct 14 13:30:45 2015 +0200

    x86/setup: Extend low identity map to cover whole kernel range

    commit f5f3497cad8c8416a74b9aaceb127908755d020a upstream.

    On 32-bit systems, the initial_page_table is reused by
    efi_call_phys_prolog as an identity map to call
    SetVirtualAddressMap.  efi_call_phys_prolog takes care of
    converting the current CPU's GDT to a physical address too.

    For PAE kernels the identity mapping is achieved by aliasing the
    first PDPE for the kernel memory mapping into the first PDPE
    of initial_page_table.  This makes the EFI stub's trick "just work".

    However, for non-PAE kernels there is no guarantee that the identity
    mapping in the initial_page_table extends as far as the GDT; in this
    case, accesses to the GDT will cause a page fault (which quickly becomes
    a triple fault).  Fix this by copying the kernel mappings from
    swapper_pg_dir to initial_page_table twice, both at PAGE_OFFSET and at
    identity mapping.

    For some reason, this is only reproducible with QEMU's dynamic translation
    mode, and not for example with KVM.  However, even under KVM one can clearly
    see that the page table is bogus:

        $ qemu-system-i386 -pflash OVMF.fd -M q35 vmlinuz0 -s -S -daemonize
        $ gdb
        (gdb) target remote localhost:1234
        (gdb) hb *0x02858f6f
        Hardware assisted breakpoint 1 at 0x2858f6f
        (gdb) c
        Continuing.

        Breakpoint 1, 0x02858f6f in ?? ()
        (gdb) monitor info registers
        ...
        GDT=     0724e000 000000ff
        IDT=     fffbb000 000007ff
        CR0=0005003b CR2=ff896000 CR3=032b7000 CR4=00000690
        ...

    The page directory is sane:

        (gdb) x/4wx 0x32b7000
        0x32b7000:	0x03398063	0x03399063	0x0339a063	0x0339b063
        (gdb) x/4wx 0x3398000
        0x3398000:	0x00000163	0x00001163	0x00002163	0x00003163
        (gdb) x/4wx 0x3399000
        0x3399000:	0x00400003	0x00401003	0x00402003	0x00403003

    but our particular page directory entry is empty:

        (gdb) x/1wx 0x32b7000 + (0x724e000 &gt;&gt; 22) * 4
        0x32b7070:	0x00000000

    [ It appears that you can skate past this issue if you don't receive
      any interrupts while the bogus GDT pointer is loaded, or if you avoid
      reloading the segment registers in general.

      Andy Lutomirski provides some additional insight:

       "AFAICT it's entirely permissible for the GDTR and/or LDT
        descriptor to point to unmapped memory.  Any attempt to use them
        (segment loads, interrupts, IRET, etc) will try to access that memory
        as if the access came from CPL 0 and, if the access fails, will
        generate a valid page fault with CR2 pointing into the GDT or
        LDT."

      Up until commit 23a0d4e8fa6d ("efi: Disable interrupts around EFI
      calls, not in the epilog/prolog calls") interrupts were disabled
      around the prolog and epilog calls, and the functional GDT was
      re-installed before interrupts were re-enabled.

      Which explains why no one has hit this issue until now. ]

    Signed-off-by: Paolo Bonzini &lt;pbonzini@redhat.com&gt;
    Reported-by: Laszlo Ersek &lt;lersek@redhat.com&gt;
    Cc: &lt;stable@vger.kernel.org&gt;
    Cc: Borislav Petkov &lt;bp@alien8.de&gt;
    Cc: "H. Peter Anvin" &lt;hpa@zytor.com&gt;
    Cc: Thomas Gleixner &lt;tglx@linutronix.de&gt;
    Cc: Ingo Molnar &lt;mingo@kernel.org&gt;
    Cc: Andy Lutomirski &lt;luto@amacapital.net&gt;
    Signed-off-by: Matt Fleming &lt;matt.fleming@intel.com&gt;
    [ Updated changelog. ]
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 8d4b96524384f8962c64c2ae061326682916dc48
Author: Florian Fainelli &lt;f.fainelli@gmail.com&gt;
Date:   Sat Oct 3 13:03:47 2015 -0700

    ARM: orion: Fix DSA platform device after mvmdio conversion

    commit d836ace65ee98d7079bc3c5afdbcc0e27dca20a3 upstream.

    DSA expects the host_dev pointer to be the device structure associated
    with the MDIO bus controller driver. First commit breaking that was
    c3a07134e6aa ("mv643xx_eth: convert to use the Marvell Orion MDIO
    driver"), and then, it got completely under the radar for a while.

    Reported-by: Frans van de Wiel &lt;fvdw@fvdw.eu&gt;
    Fixes: c3a07134e6aa ("mv643xx_eth: convert to use the Marvell Orion MDIO driver")
    Signed-off-by: Florian Fainelli &lt;f.fainelli@gmail.com&gt;
    Signed-off-by: Gregory CLEMENT &lt;gregory.clement@free-electrons.com&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 1aac1dc9886764cfa1226273e4d4709284872442
Author: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Date:   Fri Aug 28 09:42:09 2015 +0100

    ARM: 8427/1: dma-mapping: add support for offset parameter in dma_mmap()

    commit 7e31210349e9e03a9a4dff31ab5f2bc83e8e84f5 upstream.

    IOMMU-based dma_mmap() implementation lacked proper support for offset
    parameter used in mmap call (it always assumed that mapping starts from
    offset zero). This patch adds support for offset parameter to IOMMU-based
    implementation.

    Signed-off-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
    Signed-off-by: Russell King &lt;rmk+kernel@arm.linux.org.uk&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 98cc6d31fa7dde7beb1bccc51ad5c858d9ae5b04
Author: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Date:   Fri Aug 28 09:41:39 2015 +0100

    ARM: 8426/1: dma-mapping: add missing range check in dma_mmap()

    commit 371f0f085f629fc0f66695f572373ca4445a67ad upstream.

    dma_mmap() function in IOMMU-based dma-mapping implementation lacked
    a check for valid range of mmap parameters (offset and buffer size), what
    might have caused access beyond the allocated buffer. This patch fixes
    this issue.

    Signed-off-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
    Signed-off-by: Russell King &lt;rmk+kernel@arm.linux.org.uk&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit c79f626810b7d20aca9cd935d8cfc3272ba7a054
Author: Sasha Levin &lt;sasha.levin@oracle.com&gt;
Date:   Tue Sep 8 10:53:40 2015 -0400

    RDS: verify the underlying transport exists before creating a connection

    [ Upstream commit 74e98eb085889b0d2d4908f59f6e00026063014f ]

    There was no verification that an underlying transport exists when creating
    a connection, this would cause dereferencing a NULL ptr.

    It might happen on sockets that weren't properly bound before attempting to
    send a message, which will cause a NULL ptr deref:

    [135546.047719] kasan: GPF could be caused by NULL-ptr deref or user memory accessgeneral protection fault: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC KASAN
    [135546.051270] Modules linked in:
    [135546.051781] CPU: 4 PID: 15650 Comm: trinity-c4 Not tainted 4.2.0-next-20150902-sasha-00041-gbaa1222-dirty #2527
    [135546.053217] task: ffff8800835bc000 ti: ffff8800bc708000 task.ti: ffff8800bc708000
    [135546.054291] RIP: __rds_conn_create (net/rds/connection.c:194)
    [135546.055666] RSP: 0018:ffff8800bc70fab0  EFLAGS: 00010202
    [135546.056457] RAX: dffffc0000000000 RBX: 0000000000000f2c RCX: ffff8800835bc000
    [135546.057494] RDX: 0000000000000007 RSI: ffff8800835bccd8 RDI: 0000000000000038
    [135546.058530] RBP: ffff8800bc70fb18 R08: 0000000000000001 R09: 0000000000000000
    [135546.059556] R10: ffffed014d7a3a23 R11: ffffed014d7a3a21 R12: 0000000000000000
    [135546.060614] R13: 0000000000000001 R14: ffff8801ec3d0000 R15: 0000000000000000
    [135546.061668] FS:  00007faad4ffb700(0000) GS:ffff880252000000(0000) knlGS:0000000000000000
    [135546.062836] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
    [135546.063682] CR2: 000000000000846a CR3: 000000009d137000 CR4: 00000000000006a0
    [135546.064723] Stack:
    [135546.065048]  ffffffffafe2055c ffffffffafe23fc1 ffffed00493097bf ffff8801ec3d0008
    [135546.066247]  0000000000000000 00000000000000d0 0000000000000000 ac194a24c0586342
    [135546.067438]  1ffff100178e1f78 ffff880320581b00 ffff8800bc70fdd0 ffff880320581b00
    [135546.068629] Call Trace:
    [135546.069028] ? __rds_conn_create (include/linux/rcupdate.h:856 net/rds/connection.c:134)
    [135546.069989] ? rds_message_copy_from_user (net/rds/message.c:298)
    [135546.071021] rds_conn_create_outgoing (net/rds/connection.c:278)
    [135546.071981] rds_sendmsg (net/rds/send.c:1058)
    [135546.072858] ? perf_trace_lock (include/trace/events/lock.h:38)
    [135546.073744] ? lockdep_init (kernel/locking/lockdep.c:3298)
    [135546.074577] ? rds_send_drop_to (net/rds/send.c:976)
    [135546.075508] ? __might_fault (./arch/x86/include/asm/current.h:14 mm/memory.c:3795)
    [135546.076349] ? __might_fault (mm/memory.c:3795)
    [135546.077179] ? rds_send_drop_to (net/rds/send.c:976)
    [135546.078114] sock_sendmsg (net/socket.c:611 net/socket.c:620)
    [135546.078856] SYSC_sendto (net/socket.c:1657)
    [135546.079596] ? SYSC_connect (net/socket.c:1628)
    [135546.080510] ? trace_dump_stack (kernel/trace/trace.c:1926)
    [135546.081397] ? ring_buffer_unlock_commit (kernel/trace/ring_buffer.c:2479 kernel/trace/ring_buffer.c:2558 kernel/trace/ring_buffer.c:2674)
    [135546.082390] ? trace_buffer_unlock_commit (kernel/trace/trace.c:1749)
    [135546.083410] ? trace_event_raw_event_sys_enter (include/trace/events/syscalls.h:16)
    [135546.084481] ? do_audit_syscall_entry (include/trace/events/syscalls.h:16)
    [135546.085438] ? trace_buffer_unlock_commit (kernel/trace/trace.c:1749)
    [135546.085515] rds_ib_laddr_check(): addr 36.74.25.172 ret -99 node type -1

    Acked-by: Santosh Shilimkar &lt;santosh.shilimkar@oracle.com&gt;
    Signed-off-by: Sasha Levin &lt;sasha.levin@oracle.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit bd81712486bd1af8086984b5191d055908d867ec
Author: Jason Wang &lt;jasowang@redhat.com&gt;
Date:   Wed Aug 5 10:34:04 2015 +0800

    virtio-net: drop NETIF_F_FRAGLIST

    [ Upstream commit 48900cb6af4282fa0fb6ff4d72a81aa3dadb5c39 ]

    virtio declares support for NETIF_F_FRAGLIST, but assumes
    that there are at most MAX_SKB_FRAGS + 2 fragments which isn't
    always true with a fraglist.

    A longer fraglist in the skb will make the call to skb_to_sgvec overflow
    the sg array, leading to memory corruption.

    Drop NETIF_F_FRAGLIST so we only get what we can handle.

    Cc: Michael S. Tsirkin &lt;mst@redhat.com&gt;
    Signed-off-by: Jason Wang &lt;jasowang@redhat.com&gt;
    Acked-by: Michael S. Tsirkin &lt;mst@redhat.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 0be0e5758dbdf3f61378b5d17d00363f92e93bae
Author: Eric Dumazet &lt;edumazet@google.com&gt;
Date:   Mon Nov 9 17:51:23 2015 -0800

    net: fix a race in dst_release()

    [ Upstream commit d69bbf88c8d0b367cf3e3a052f6daadf630ee566 ]

    Only cpu seeing dst refcount going to 0 can safely
    dereference dst-&gt;flags.

    Otherwise an other cpu might already have freed the dst.

    Fixes: 27b75c95f10d ("net: avoid RCU for NOCACHE dst")
    Reported-by: Greg Thelen &lt;gthelen@google.com&gt;
    Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 0861d012ecff07b74a8c6ecfda04bb1737831e09
Author: Eric Dumazet &lt;edumazet@google.com&gt;
Date:   Mon Nov 2 07:50:07 2015 -0800

    net: avoid NULL deref in inet_ctl_sock_destroy()

    [ Upstream commit 8fa677d2706d325d71dab91bf6e6512c05214e37 ]

    Under low memory conditions, tcp_sk_init() and icmp_sk_init()
    can both iterate on all possible cpus and call inet_ctl_sock_destroy(),
    with eventual NULL pointer.

    Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
    Reported-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 25e462d9e34f8bb0cdaab78093c61373048d13a3
Author: Ani Sinha &lt;ani@arista.com&gt;
Date:   Fri Oct 30 16:54:31 2015 -0700

    ipmr: fix possible race resulting from improper usage of IP_INC_STATS_BH() in preemptible context.

    [ Upstream commit 44f49dd8b5a606870a1f21101522a0f9c4414784 ]

    Fixes the following kernel BUG :

    BUG: using __this_cpu_add() in preemptible [00000000] code: bash/2758
    caller is __this_cpu_preempt_check+0x13/0x15
    CPU: 0 PID: 2758 Comm: bash Tainted: P           O   3.18.19 #2
     ffffffff8170eaca ffff880110d1b788 ffffffff81482b2a 0000000000000000
     0000000000000000 ffff880110d1b7b8 ffffffff812010ae ffff880007cab800
     ffff88001a060800 ffff88013a899108 ffff880108b84240 ffff880110d1b7c8
    Call Trace:
    [&lt;ffffffff81482b2a&gt;] dump_stack+0x52/0x80
    [&lt;ffffffff812010ae&gt;] check_preemption_disabled+0xce/0xe1
    [&lt;ffffffff812010d4&gt;] __this_cpu_preempt_check+0x13/0x15
    [&lt;ffffffff81419d60&gt;] ipmr_queue_xmit+0x647/0x70c
    [&lt;ffffffff8141a154&gt;] ip_mr_forward+0x32f/0x34e
    [&lt;ffffffff8141af76&gt;] ip_mroute_setsockopt+0xe03/0x108c
    [&lt;ffffffff810553fc&gt;] ? get_parent_ip+0x11/0x42
    [&lt;ffffffff810e6974&gt;] ? pollwake+0x4d/0x51
    [&lt;ffffffff81058ac0&gt;] ? default_wake_function+0x0/0xf
    [&lt;ffffffff810553fc&gt;] ? get_parent_ip+0x11/0x42
    [&lt;ffffffff810613d9&gt;] ? __wake_up_common+0x45/0x77
    [&lt;ffffffff81486ea9&gt;] ? _raw_spin_unlock_irqrestore+0x1d/0x32
    [&lt;ffffffff810618bc&gt;] ? __wake_up_sync_key+0x4a/0x53
    [&lt;ffffffff8139a519&gt;] ? sock_def_readable+0x71/0x75
    [&lt;ffffffff813dd226&gt;] do_ip_setsockopt+0x9d/0xb55
    [&lt;ffffffff81429818&gt;] ? unix_seqpacket_sendmsg+0x3f/0x41
    [&lt;ffffffff813963fe&gt;] ? sock_sendmsg+0x6d/0x86
    [&lt;ffffffff813959d4&gt;] ? sockfd_lookup_light+0x12/0x5d
    [&lt;ffffffff8139650a&gt;] ? SyS_sendto+0xf3/0x11b
    [&lt;ffffffff810d5738&gt;] ? new_sync_read+0x82/0xaa
    [&lt;ffffffff813ddd19&gt;] compat_ip_setsockopt+0x3b/0x99
    [&lt;ffffffff813fb24a&gt;] compat_raw_setsockopt+0x11/0x32
    [&lt;ffffffff81399052&gt;] compat_sock_common_setsockopt+0x18/0x1f
    [&lt;ffffffff813c4d05&gt;] compat_SyS_setsockopt+0x1a9/0x1cf
    [&lt;ffffffff813c4149&gt;] compat_SyS_socketcall+0x180/0x1e3
    [&lt;ffffffff81488ea1&gt;] cstar_dispatch+0x7/0x1e

    Signed-off-by: Ani Sinha &lt;ani@arista.com&gt;
    Acked-by: Eric Dumazet &lt;edumazet@google.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 34805d167c315860130d55448e9a45b51cc18fb2
Author: Phil Reid &lt;preid@electromag.com.au&gt;
Date:   Fri Oct 30 16:43:55 2015 +0800

    stmmac: Correctly report PTP capabilities.

    [ Upstream commit e6dbe1eb2db0d7a14991c06278dd3030c45fb825 ]

    priv-&gt;hwts_*_en indicate if timestamping is enabled/disabled at run
    time. But  priv-&gt;dma_cap.time_stamp  and priv-&gt;dma_cap.atime_stamp
    indicates HW is support for PTPv1/PTPv2.

    Signed-off-by: Phil Reid &lt;preid@electromag.com.au&gt;
    Acked-by: Richard Cochran &lt;richardcochran@gmail.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 669cd5ea954101b516a1632995e8e12f2898da17
Author: Carol L Soto &lt;clsoto@linux.vnet.ibm.com&gt;
Date:   Tue Oct 27 17:36:20 2015 +0200

    net/mlx4: Copy/set only sizeof struct mlx4_eqe bytes

    [ Upstream commit c02b05011fadf8e409e41910217ca689f2fc9d91 ]

    When doing memcpy/memset of EQEs, we should use sizeof struct
    mlx4_eqe as the base size and not caps.eqe_size which could be bigger.

    If caps.eqe_size is bigger than the struct mlx4_eqe then we corrupt
    data in the master context.

    When using a 64 byte stride, the memcpy copied over 63 bytes to the
    slave_eq structure.  This resulted in copying over the entire eqe of
    interest, including its ownership bit -- and also 31 bytes of garbage
    into the next WQE in the slave EQ -- which did NOT include the ownership
    bit (and therefore had no impact).

    However, once the stride is increased to 128, we are overwriting the
    ownership bits of *three* eqes in the slave_eq struct.  This results
    in an incorrect ownership bit for those eqes, which causes the eq to
    seem to be full. The issue therefore surfaced only once 128-byte EQEs
    started being used in SRIOV and (overarchitectures that have 128/256
    byte cache-lines such as PPC) - e.g after commit 77507aa249ae
    "net/mlx4_core: Enable CQE/EQE stride support".

    Fixes: 08ff32352d6f ('mlx4: 64-byte CQE/EQE support')
    Signed-off-by: Carol L Soto &lt;clsoto@linux.vnet.ibm.com&gt;
    Signed-off-by: Jack Morgenstein &lt;jackm@dev.mellanox.co.il&gt;
    Signed-off-by: Or Gerlitz &lt;ogerlitz@mellanox.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit 074043fdd071a4d5c4cd25fa7aaaff5c6eedd1dd
Author: Sowmini Varadhan &lt;sowmini.varadhan@oracle.com&gt;
Date:   Mon Oct 26 12:46:37 2015 -0400

    RDS-TCP: Recover correctly from pskb_pull()/pksb_trim() failure in rds_tcp_data_recv

    [ Upstream commit 8ce675ff39b9958d1c10f86cf58e357efaafc856 ]

    Either of pskb_pull() or pskb_trim() may fail under low memory conditions.
    If rds_tcp_data_recv() ignores such failures, the application will
    receive corrupted data because the skb has not been correctly
    carved to the RDS datagram size.

    Avoid this by handling pskb_pull/pskb_trim failure in the same
    manner as the skb_clone failure: bail out of rds_tcp_data_recv(), and
    retry via the deferred call to rds_send_worker() that gets set up on
    ENOMEM from rds_tcp_read_sock()

    Signed-off-by: Sowmini Varadhan &lt;sowmini.varadhan@oracle.com&gt;
    Acked-by: Santosh Shilimkar &lt;santosh.shilimkar@oracle.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit e42f6b5c7bcf22062a389d40cbf2a723aab4d2df
Author: Guillaume Nault &lt;g.nault@alphalink.fr&gt;
Date:   Thu Oct 22 16:57:10 2015 +0200

    ppp: fix pppoe_dev deletion condition in pppoe_release()

    [ Upstream commit 1acea4f6ce1b1c0941438aca75dd2e5c6b09db60 ]

    We can't rely on PPPOX_ZOMBIE to decide whether to clear po-&gt;pppoe_dev.
    PPPOX_ZOMBIE can be set by pppoe_disc_rcv() even when po-&gt;pppoe_dev is
    NULL. So we have no guarantee that (sk-&gt;sk_state &amp; PPPOX_ZOMBIE) implies
    (po-&gt;pppoe_dev != NULL).
    Since we're releasing a PPPoE socket, we want to release the pppoe_dev
    if it exists and reset sk_state to PPPOX_DEAD, no matter the previous
    value of sk_state. So we can just check for po-&gt;pppoe_dev and avoid any
    assumption on sk-&gt;sk_state.

    Fixes: 2b018d57ff18 ("pppoe: drop PPPOX_ZOMBIEs in pppoe_release")
    Signed-off-by: Guillaume Nault &lt;g.nault@alphalink.fr&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

commit edbdd72399cf707f3086a8c3df35e435381fd227
Author: Dan Carpenter &lt;dan.carpenter@oracle.com&gt;
Date:   Mon Oct 19 13:16:49 2015 +0300

    irda: precedence bug in irlmp_seq_hb_idx()

    [ Upstream commit 50010c20597d14667eff0fdb628309986f195230 ]

    This is decrementing the pointer, instead of the value stored in the
    pointer.  KASan detects it as an out of bounds reference.

    Reported-by: "Berry Cheng 程君(成淼)" &lt;chengmiao.cj@alibaba-inc.com&gt;
    Signed-off-by: Dan Carpenter &lt;dan.carpenter@oracle.com&gt;
    Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
    Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>3.10.71 -&gt; 3.10.72</title>
<updated>2016-08-26T13:59:49+00:00</updated>
<author>
<name>Jan Engelmohr</name>
<email>jan.engelmohr@mailbox.tu-dresden.de</email>
</author>
<published>2016-07-26T16:10:21+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/android_kernel_m2note/commit/?id=d7f59ace74662a703f7b079e61f9cdbc1dcb9ab3'/>
<id>urn:sha1:d7f59ace74662a703f7b079e61f9cdbc1dcb9ab3</id>
<content type='text'>
</content>
</entry>
</feed>
