Linux v4.5-6486-g6b5f04b6cf8e
- cgroup, libata, workqueue, block, akpm, usb merges
This commit is contained in:
		
							parent
							
								
									3f7b06675b
								
							
						
					
					
						commit
						8e2d7107d3
					
				| @ -1,173 +0,0 @@ | ||||
| From 8b368e8e961944105945fbe36f3f264252bfd19a Mon Sep 17 00:00:00 2001 | ||||
| From: Dan Williams <dan.j.williams@intel.com> | ||||
| Date: Thu, 25 Feb 2016 01:02:30 +0000 | ||||
| Subject: [PATCH] mm: CONFIG_NR_ZONES_EXTENDED | ||||
| 
 | ||||
| ZONE_DEVICE (merged in 4.3) and ZONE_CMA (proposed) are examples of new mm | ||||
| zones that are bumping up against the current maximum limit of 4 zones, | ||||
| i.e.  2 bits in page->flags.  When adding a zone this equation still needs | ||||
| to be satisified: | ||||
| 
 | ||||
|     SECTIONS_WIDTH + ZONES_WIDTH + NODES_SHIFT + LAST_CPUPID_SHIFT | ||||
| 	  <= BITS_PER_LONG - NR_PAGEFLAGS | ||||
| 
 | ||||
| ZONE_DEVICE currently tries to satisfy this equation by requiring that | ||||
| ZONE_DMA be disabled, but this is untenable given generic kernels want to | ||||
| support ZONE_DEVICE and ZONE_DMA simultaneously.  ZONE_CMA would like to | ||||
| increase the amount of memory covered per section, but that limits the | ||||
| minimum granularity at which consecutive memory ranges can be added via | ||||
| devm_memremap_pages(). | ||||
| 
 | ||||
| The trade-off of what is acceptable to sacrifice depends heavily on the | ||||
| platform.  For example, ZONE_CMA is targeted for 32-bit platforms where | ||||
| page->flags is constrained, but those platforms likely do not care about | ||||
| the minimum granularity of memory hotplug.  A big iron machine with 1024 | ||||
| numa nodes can likely sacrifice ZONE_DMA where a general purpose | ||||
| distribution kernel can not. | ||||
| 
 | ||||
| CONFIG_NR_ZONES_EXTENDED is a configuration symbol that gets selected when | ||||
| the number of configured zones exceeds 4.  It documents the configuration | ||||
| symbols and definitions that get modified when ZONES_WIDTH is greater than | ||||
| 2. | ||||
| 
 | ||||
| For now, it steals a bit from NODES_SHIFT.  Later on it can be used to | ||||
| document the definitions that get modified when a 32-bit configuration | ||||
| wants more zone bits. | ||||
| 
 | ||||
| Note that GFP_ZONE_TABLE poses an interesting constraint since | ||||
| include/linux/gfp.h gets included by the 32-bit portion of a 64-bit build. | ||||
| We need to be careful to only build the table for zones that have a | ||||
| corresponding gfp_t flag.  GFP_ZONES_SHIFT is introduced for this purpose. | ||||
| This patch does not attempt to solve the problem of adding a new zone | ||||
| that also has a corresponding GFP_ flag. | ||||
| 
 | ||||
| Link: https://bugzilla.kernel.org/show_bug.cgi?id=110931 | ||||
| Fixes: 033fbae988fc ("mm: ZONE_DEVICE for "device memory"") | ||||
| Signed-off-by: Dan Williams <dan.j.williams@intel.com> | ||||
| Reported-by: Mark <markk@clara.co.uk> | ||||
| Cc: Mel Gorman <mgorman@suse.de> | ||||
| Cc: Rik van Riel <riel@redhat.com> | ||||
| Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> | ||||
| Cc: Dave Hansen <dave.hansen@linux.intel.com> | ||||
| Cc: Sudip Mukherjee <sudipm.mukherjee@gmail.com> | ||||
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | ||||
| ---
 | ||||
|  arch/x86/Kconfig                  |  6 ++++-- | ||||
|  include/linux/gfp.h               | 33 ++++++++++++++++++++------------- | ||||
|  include/linux/page-flags-layout.h |  2 ++ | ||||
|  mm/Kconfig                        |  7 +++++-- | ||||
|  4 files changed, 31 insertions(+), 17 deletions(-) | ||||
| 
 | ||||
| diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
 | ||||
| index 3fef519..b94704a 100644
 | ||||
| --- a/arch/x86/Kconfig
 | ||||
| +++ b/arch/x86/Kconfig
 | ||||
| @@ -1409,8 +1409,10 @@ config NUMA_EMU
 | ||||
|   | ||||
|  config NODES_SHIFT | ||||
|  	int "Maximum NUMA Nodes (as a power of 2)" if !MAXSMP | ||||
| -	range 1 10
 | ||||
| -	default "10" if MAXSMP
 | ||||
| +	range 1 10 if !NR_ZONES_EXTENDED
 | ||||
| +	range 1 9 if NR_ZONES_EXTENDED
 | ||||
| +	default "10" if MAXSMP && !NR_ZONES_EXTENDED
 | ||||
| +	default "9" if MAXSMP && NR_ZONES_EXTENDED
 | ||||
|  	default "6" if X86_64 | ||||
|  	default "3" | ||||
|  	depends on NEED_MULTIPLE_NODES | ||||
| diff --git a/include/linux/gfp.h b/include/linux/gfp.h
 | ||||
| index af1f2b2..d201d8a 100644
 | ||||
| --- a/include/linux/gfp.h
 | ||||
| +++ b/include/linux/gfp.h
 | ||||
| @@ -329,22 +329,29 @@ static inline bool gfpflags_allow_blocking(const gfp_t gfp_flags)
 | ||||
|   *       0xe    => BAD (MOVABLE+DMA32+HIGHMEM) | ||||
|   *       0xf    => BAD (MOVABLE+DMA32+HIGHMEM+DMA) | ||||
|   * | ||||
| - * ZONES_SHIFT must be <= 2 on 32 bit platforms.
 | ||||
| + * GFP_ZONES_SHIFT must be <= 2 on 32 bit platforms.
 | ||||
|   */ | ||||
|   | ||||
| -#if 16 * ZONES_SHIFT > BITS_PER_LONG
 | ||||
| -#error ZONES_SHIFT too large to create GFP_ZONE_TABLE integer
 | ||||
| +#if defined(CONFIG_ZONE_DEVICE) && (MAX_NR_ZONES-1) <= 4
 | ||||
| +/* ZONE_DEVICE is not a valid GFP zone specifier */
 | ||||
| +#define GFP_ZONES_SHIFT 2
 | ||||
| +#else
 | ||||
| +#define GFP_ZONES_SHIFT ZONES_SHIFT
 | ||||
| +#endif
 | ||||
| +
 | ||||
| +#if 16 * GFP_ZONES_SHIFT > BITS_PER_LONG
 | ||||
| +#error GFP_ZONES_SHIFT too large to create GFP_ZONE_TABLE integer
 | ||||
|  #endif | ||||
|   | ||||
|  #define GFP_ZONE_TABLE ( \ | ||||
| -	(ZONE_NORMAL << 0 * ZONES_SHIFT)				      \
 | ||||
| -	| (OPT_ZONE_DMA << ___GFP_DMA * ZONES_SHIFT)			      \
 | ||||
| -	| (OPT_ZONE_HIGHMEM << ___GFP_HIGHMEM * ZONES_SHIFT)		      \
 | ||||
| -	| (OPT_ZONE_DMA32 << ___GFP_DMA32 * ZONES_SHIFT)		      \
 | ||||
| -	| (ZONE_NORMAL << ___GFP_MOVABLE * ZONES_SHIFT)			      \
 | ||||
| -	| (OPT_ZONE_DMA << (___GFP_MOVABLE | ___GFP_DMA) * ZONES_SHIFT)	      \
 | ||||
| -	| (ZONE_MOVABLE << (___GFP_MOVABLE | ___GFP_HIGHMEM) * ZONES_SHIFT)   \
 | ||||
| -	| (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * ZONES_SHIFT)   \
 | ||||
| +	(ZONE_NORMAL << 0 * GFP_ZONES_SHIFT)					\
 | ||||
| +	| (OPT_ZONE_DMA << ___GFP_DMA * GFP_ZONES_SHIFT)			\
 | ||||
| +	| (OPT_ZONE_HIGHMEM << ___GFP_HIGHMEM * GFP_ZONES_SHIFT)		\
 | ||||
| +	| (OPT_ZONE_DMA32 << ___GFP_DMA32 * GFP_ZONES_SHIFT)		      	\
 | ||||
| +	| (ZONE_NORMAL << ___GFP_MOVABLE * GFP_ZONES_SHIFT)			\
 | ||||
| +	| (OPT_ZONE_DMA << (___GFP_MOVABLE | ___GFP_DMA) * GFP_ZONES_SHIFT)	\
 | ||||
| +	| (ZONE_MOVABLE << (___GFP_MOVABLE | ___GFP_HIGHMEM) * GFP_ZONES_SHIFT)	\
 | ||||
| +	| (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * GFP_ZONES_SHIFT)	\
 | ||||
|  ) | ||||
|   | ||||
|  /* | ||||
| @@ -369,8 +376,8 @@ static inline enum zone_type gfp_zone(gfp_t flags)
 | ||||
|  	enum zone_type z; | ||||
|  	int bit = (__force int) (flags & GFP_ZONEMASK); | ||||
|   | ||||
| -	z = (GFP_ZONE_TABLE >> (bit * ZONES_SHIFT)) &
 | ||||
| -					 ((1 << ZONES_SHIFT) - 1);
 | ||||
| +	z = (GFP_ZONE_TABLE >> (bit * GFP_ZONES_SHIFT)) &
 | ||||
| +					 ((1 << GFP_ZONES_SHIFT) - 1);
 | ||||
|  	VM_BUG_ON((GFP_ZONE_BAD >> bit) & 1); | ||||
|  	return z; | ||||
|  } | ||||
| diff --git a/include/linux/page-flags-layout.h b/include/linux/page-flags-layout.h
 | ||||
| index da52366..77b078c 100644
 | ||||
| --- a/include/linux/page-flags-layout.h
 | ||||
| +++ b/include/linux/page-flags-layout.h
 | ||||
| @@ -17,6 +17,8 @@
 | ||||
|  #define ZONES_SHIFT 1 | ||||
|  #elif MAX_NR_ZONES <= 4 | ||||
|  #define ZONES_SHIFT 2 | ||||
| +#elif MAX_NR_ZONES <= 8
 | ||||
| +#define ZONES_SHIFT 3
 | ||||
|  #else | ||||
|  #error ZONES_SHIFT -- too many zones configured adjust calculation | ||||
|  #endif | ||||
| diff --git a/mm/Kconfig b/mm/Kconfig
 | ||||
| index 031a329..7826216 100644
 | ||||
| --- a/mm/Kconfig
 | ||||
| +++ b/mm/Kconfig
 | ||||
| @@ -652,8 +652,6 @@ config IDLE_PAGE_TRACKING
 | ||||
|   | ||||
|  config ZONE_DEVICE | ||||
|  	bool "Device memory (pmem, etc...) hotplug support" | ||||
| -	default !ZONE_DMA
 | ||||
| -	depends on !ZONE_DMA
 | ||||
|  	depends on MEMORY_HOTPLUG | ||||
|  	depends on MEMORY_HOTREMOVE | ||||
|  	depends on X86_64 #arch_add_memory() comprehends device memory | ||||
| @@ -667,5 +665,10 @@ config ZONE_DEVICE
 | ||||
|   | ||||
|  	  If FS_DAX is enabled, then say Y. | ||||
|   | ||||
| +config NR_ZONES_EXTENDED
 | ||||
| +	bool
 | ||||
| +	default n if !64BIT
 | ||||
| +	default y if ZONE_DEVICE && ZONE_DMA && ZONE_DMA32
 | ||||
| +
 | ||||
|  config FRAME_VECTOR | ||||
|  	bool | ||||
| -- 
 | ||||
| 2.5.0 | ||||
| 
 | ||||
							
								
								
									
										31
									
								
								ALSA-hda-Fix-forgotten-HDMI-monitor_present-update.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								ALSA-hda-Fix-forgotten-HDMI-monitor_present-update.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | ||||
| From e36b3efcd07ab5c323e82319577d972ebddcbed1 Mon Sep 17 00:00:00 2001 | ||||
| From: Takashi Iwai <tiwai@suse.de> | ||||
| Date: Fri, 18 Mar 2016 18:01:53 +0100 | ||||
| Subject: [PATCH 2/3] ALSA: hda - Fix forgotten HDMI monitor_present update | ||||
| 
 | ||||
| We forgot to copy monitor_present value when updating the ELD | ||||
| information.  This won't change the ELD retrieval and the jack | ||||
| notification behavior, but appears only in the proc output.   In that | ||||
| sense, it's no fatal error, but a bug is a bug is a bug. | ||||
| 
 | ||||
| Cc: <stable@vger.kernel.org> | ||||
| Signed-off-by: Takashi Iwai <tiwai@suse.de> | ||||
| ---
 | ||||
|  sound/pci/hda/patch_hdmi.c | 1 + | ||||
|  1 file changed, 1 insertion(+) | ||||
| 
 | ||||
| diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
 | ||||
| index 8cdb804aa9cf..e7d9453ecd10 100644
 | ||||
| --- a/sound/pci/hda/patch_hdmi.c
 | ||||
| +++ b/sound/pci/hda/patch_hdmi.c
 | ||||
| @@ -1358,6 +1358,7 @@ static void update_eld(struct hda_codec *codec,
 | ||||
|  			   eld->eld_size) != 0) | ||||
|  			eld_changed = true; | ||||
|   | ||||
| +	pin_eld->monitor_present = eld->monitor_present;
 | ||||
|  	pin_eld->eld_valid = eld->eld_valid; | ||||
|  	pin_eld->eld_size = eld->eld_size; | ||||
|  	if (eld->eld_valid) | ||||
| -- 
 | ||||
| 2.5.0 | ||||
| 
 | ||||
							
								
								
									
										44
									
								
								ALSA-hda-Fix-spurious-kernel-WARNING-on-Baytrail-HDM.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								ALSA-hda-Fix-spurious-kernel-WARNING-on-Baytrail-HDM.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | ||||
| From 1f2109de8368f08a353d7862f462b943a5ac4b4a Mon Sep 17 00:00:00 2001 | ||||
| From: Takashi Iwai <tiwai@suse.de> | ||||
| Date: Fri, 18 Mar 2016 19:45:13 +0100 | ||||
| Subject: [PATCH 3/3] ALSA: hda - Fix spurious kernel WARNING on Baytrail HDMI | ||||
| MIME-Version: 1.0 | ||||
| Content-Type: text/plain; charset=UTF-8 | ||||
| Content-Transfer-Encoding: 8bit | ||||
| 
 | ||||
| snd_hdac_sync_audio_rate() call is mandatory only for HSW and later | ||||
| models, but we call the function unconditionally blindly assuming that | ||||
| the function doesn't do anything harmful.  But since recently, the | ||||
| function checks the validity of the passed pin NID, and eventually | ||||
| spews the warning if an unexpected pin is passed.  This is seen on old | ||||
| chips like Baytrail. | ||||
| 
 | ||||
| The fix is to limit the call of this function again only for the chips | ||||
| with the proper binding.  This can be identified by the same flag as | ||||
| the eld notifier. | ||||
| 
 | ||||
| Reported-by: Ville Syrjälä <ville.syrjala@linux.intel.com> | ||||
| Tested-by: Ville Syrjälä <ville.syrjala@linux.intel.com> | ||||
| Cc: <stable@vger.kernel.org> # v4.5 | ||||
| Signed-off-by: Takashi Iwai <tiwai@suse.de> | ||||
| ---
 | ||||
|  sound/pci/hda/patch_hdmi.c | 3 ++- | ||||
|  1 file changed, 2 insertions(+), 1 deletion(-) | ||||
| 
 | ||||
| diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
 | ||||
| index e7d9453ecd10..56d3575ee6cc 100644
 | ||||
| --- a/sound/pci/hda/patch_hdmi.c
 | ||||
| +++ b/sound/pci/hda/patch_hdmi.c
 | ||||
| @@ -1741,7 +1741,8 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
 | ||||
|   | ||||
|  	/* Call sync_audio_rate to set the N/CTS/M manually if necessary */ | ||||
|  	/* Todo: add DP1.2 MST audio support later */ | ||||
| -	snd_hdac_sync_audio_rate(&codec->bus->core, pin_nid, runtime->rate);
 | ||||
| +	if (codec_has_acomp(codec))
 | ||||
| +		snd_hdac_sync_audio_rate(&codec->bus->core, pin_nid, runtime->rate);
 | ||||
|   | ||||
|  	non_pcm = check_non_pcm_per_cvt(codec, cvt_nid); | ||||
|  	mutex_lock(&per_pin->lock); | ||||
| -- 
 | ||||
| 2.5.0 | ||||
| 
 | ||||
							
								
								
									
										80
									
								
								ALSA-hda-Really-restrict-i915-notifier-to-HSW.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								ALSA-hda-Really-restrict-i915-notifier-to-HSW.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,80 @@ | ||||
| From 3fb329b2c3b6c2f009aa1255d2436ec49e49877f Mon Sep 17 00:00:00 2001 | ||||
| From: Takashi Iwai <tiwai@suse.de> | ||||
| Date: Fri, 18 Mar 2016 15:10:08 +0100 | ||||
| Subject: [PATCH 1/3] ALSA: hda - Really restrict i915 notifier to HSW+ | ||||
| MIME-Version: 1.0 | ||||
| Content-Type: text/plain; charset=UTF-8 | ||||
| Content-Transfer-Encoding: 8bit | ||||
| 
 | ||||
| The commit [b62232d429fa: ALSA: hda - Limit i915 HDMI binding only for | ||||
| HSW and later] tried to limit the usage of i915 audio notifier to the | ||||
| recent Intel models and switch to the old method on pre-Haswell | ||||
| models.  However, it assumed that the i915 component binding hasn't | ||||
| been done on such models, and the assumption was wrong: namely, | ||||
| Baytrail had already the i915 component binding due to powerwell | ||||
| control.  Thus, the workaround wasn't applied to Baytrail. | ||||
| 
 | ||||
| For fixing this properly, this patch introduces a new flag indicating | ||||
| the usage of audio notifier and codec_has_acomp() refers to this flag | ||||
| instead of checking the existence of audio component. | ||||
| 
 | ||||
| Reported-by: Ville Syrjälä <ville.syrjala@linux.intel.com> | ||||
| Cc: <stable@vger.kernel.org> # v4.5 | ||||
| Signed-off-by: Takashi Iwai <tiwai@suse.de> | ||||
| ---
 | ||||
|  sound/pci/hda/patch_hdmi.c | 24 +++++++++++++++++------- | ||||
|  1 file changed, 17 insertions(+), 7 deletions(-) | ||||
| 
 | ||||
| diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
 | ||||
| index 49ee4e55dd16..8cdb804aa9cf 100644
 | ||||
| --- a/sound/pci/hda/patch_hdmi.c
 | ||||
| +++ b/sound/pci/hda/patch_hdmi.c
 | ||||
| @@ -152,6 +152,7 @@ struct hdmi_spec {
 | ||||
|  	struct hda_pcm_stream pcm_playback; | ||||
|   | ||||
|  	/* i915/powerwell (Haswell+/Valleyview+) specific */ | ||||
| +	bool use_acomp_notifier; /* use i915 eld_notify callback for hotplug */
 | ||||
|  	struct i915_audio_component_audio_ops i915_audio_ops; | ||||
|  	bool i915_bound; /* was i915 bound in this driver? */ | ||||
|   | ||||
| @@ -159,8 +160,11 @@ struct hdmi_spec {
 | ||||
|  }; | ||||
|   | ||||
|  #ifdef CONFIG_SND_HDA_I915 | ||||
| -#define codec_has_acomp(codec) \
 | ||||
| -	((codec)->bus->core.audio_component != NULL)
 | ||||
| +static inline bool codec_has_acomp(struct hda_codec *codec)
 | ||||
| +{
 | ||||
| +	struct hdmi_spec *spec = codec->spec;
 | ||||
| +	return spec->use_acomp_notifier;
 | ||||
| +}
 | ||||
|  #else | ||||
|  #define codec_has_acomp(codec)	false | ||||
|  #endif | ||||
| @@ -2248,12 +2252,18 @@ static int patch_generic_hdmi(struct hda_codec *codec)
 | ||||
|  	codec->spec = spec; | ||||
|  	hdmi_array_init(spec, 4); | ||||
|   | ||||
| +#ifdef CONFIG_SND_HDA_I915
 | ||||
|  	/* Try to bind with i915 for Intel HSW+ codecs (if not done yet) */ | ||||
| -	if (!codec_has_acomp(codec) &&
 | ||||
| -	    (codec->core.vendor_id >> 16) == 0x8086 &&
 | ||||
| -	    is_haswell_plus(codec))
 | ||||
| -		if (!snd_hdac_i915_init(&codec->bus->core))
 | ||||
| -			spec->i915_bound = true;
 | ||||
| +	if ((codec->core.vendor_id >> 16) == 0x8086 &&
 | ||||
| +	    is_haswell_plus(codec)) {
 | ||||
| +		if (!codec->bus->core.audio_component)
 | ||||
| +			if (!snd_hdac_i915_init(&codec->bus->core))
 | ||||
| +				spec->i915_bound = true;
 | ||||
| +		/* use i915 audio component notifier for hotplug */
 | ||||
| +		if (codec->bus->core.audio_component)
 | ||||
| +			spec->use_acomp_notifier = true;
 | ||||
| +	}
 | ||||
| +#endif
 | ||||
|   | ||||
|  	if (is_haswell_plus(codec)) { | ||||
|  		intel_haswell_enable_all_pins(codec, true); | ||||
| -- 
 | ||||
| 2.5.0 | ||||
| 
 | ||||
| @ -1,40 +0,0 @@ | ||||
| From 3620ebad64a327113bed34edefd45c3605086fc6 Mon Sep 17 00:00:00 2001 | ||||
| From: Josh Boyer <jwboyer@fedoraproject.org> | ||||
| Date: Mon, 14 Mar 2016 10:38:31 -0400 | ||||
| Subject: [PATCH] USB: iowarrior: fix oops with malicious USB descriptors | ||||
| 
 | ||||
| The iowarrior driver expects at least one valid endpoint.  If given | ||||
| malicious descriptors that specify 0 for the number of endpoints, | ||||
| it will crash in the probe function.  Ensure there is at least | ||||
| one endpoint on the interface before using it. | ||||
| 
 | ||||
| The full report of this issue can be found here: | ||||
| http://seclists.org/bugtraq/2016/Mar/87 | ||||
| 
 | ||||
| Reported-by: Ralf Spenneberg <ralf@spenneberg.net> | ||||
| Cc: stable <stable@vger.kernel.org> | ||||
| Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org> | ||||
| ---
 | ||||
|  drivers/usb/misc/iowarrior.c | 6 ++++++ | ||||
|  1 file changed, 6 insertions(+) | ||||
| 
 | ||||
| diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c
 | ||||
| index c6bfd13f6c92..1950e87b4219 100644
 | ||||
| --- a/drivers/usb/misc/iowarrior.c
 | ||||
| +++ b/drivers/usb/misc/iowarrior.c
 | ||||
| @@ -787,6 +787,12 @@ static int iowarrior_probe(struct usb_interface *interface,
 | ||||
|  	iface_desc = interface->cur_altsetting; | ||||
|  	dev->product_id = le16_to_cpu(udev->descriptor.idProduct); | ||||
|   | ||||
| +	if (iface_desc->desc.bNumEndpoints < 1) {
 | ||||
| +		dev_err(&interface->dev, "Invalid number of endpoints\n");
 | ||||
| +		retval = -EINVAL;
 | ||||
| +		goto error;
 | ||||
| +	}
 | ||||
| +
 | ||||
|  	/* set up the endpoint information */ | ||||
|  	for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { | ||||
|  		endpoint = &iface_desc->endpoint[i].desc; | ||||
| -- 
 | ||||
| 2.5.0 | ||||
| 
 | ||||
| @ -1,33 +0,0 @@ | ||||
| From e6a87f147002fa16adcbafebbc458ff90a463474 Mon Sep 17 00:00:00 2001 | ||||
| From: Oliver Neukum <oneukum@suse.com> | ||||
| Date: Tue, 15 Mar 2016 10:14:04 +0100 | ||||
| Subject: [PATCH] cdc-acm: more sanity checking | ||||
| 
 | ||||
| An attack has become available which pretends to be a quirky | ||||
| device circumventing normal sanity checks and crashes the kernel | ||||
| by an insufficient number of interfaces. This patch adds a check | ||||
| to the code path for quirky devices. | ||||
| 
 | ||||
| Signed-off-by: Oliver Neukum <ONeukum@suse.com> | ||||
| CC: stable@vger.kernel.org | ||||
| ---
 | ||||
|  drivers/usb/class/cdc-acm.c | 3 +++ | ||||
|  1 file changed, 3 insertions(+) | ||||
| 
 | ||||
| diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
 | ||||
| index 26ca4f910cb0..a7732f80a912 100644
 | ||||
| --- a/drivers/usb/class/cdc-acm.c
 | ||||
| +++ b/drivers/usb/class/cdc-acm.c
 | ||||
| @@ -1113,6 +1113,9 @@ static int acm_probe(struct usb_interface *intf,
 | ||||
|  	if (quirks == NO_UNION_NORMAL) { | ||||
|  		data_interface = usb_ifnum_to_if(usb_dev, 1); | ||||
|  		control_interface = usb_ifnum_to_if(usb_dev, 0); | ||||
| +		/* we would crash */
 | ||||
| +		if (!data_interface || !control_interface)
 | ||||
| +			return -ENODEV;
 | ||||
|  		goto skip_normal_probe; | ||||
|  	} | ||||
|   | ||||
| -- 
 | ||||
| 2.5.0 | ||||
| 
 | ||||
| @ -4886,6 +4886,7 @@ CONFIG_LATENCYTOP=y | ||||
| # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||||
| CONFIG_EARLY_PRINTK_DBGP=y | ||||
| # CONFIG_PAGE_POISONING is not set | ||||
| # CONFIG_DEBUG_PAGE_REF is not set | ||||
| CONFIG_CRASH=m | ||||
| CONFIG_CRASH_DUMP=y | ||||
| # CONFIG_GCOV_KERNEL is not set | ||||
| @ -5748,7 +5749,7 @@ CONFIG_ZBUD=y | ||||
| CONFIG_ZSMALLOC=y | ||||
| # CONFIG_ZSMALLOC_STAT is not set | ||||
| # CONFIG_PGTABLE_MAPPING is not set | ||||
| 
 | ||||
| # CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set | ||||
| # CONFIG_IDLE_PAGE_TRACKING is not set | ||||
| 
 | ||||
| # CONFIG_MDIO_GPIO is not set | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| From 888ba9b2a02e8d144c3a9ae5e01a1a94280cd2bf Mon Sep 17 00:00:00 2001 | ||||
| From 78bd7226c92c8309d1c6c1378f1224dcd591b49f Mon Sep 17 00:00:00 2001 | ||||
| From: Fedora Kernel Team <kernel-team@fedoraproject.org> | ||||
| Date: Fri, 22 Jan 2016 13:03:36 -0600 | ||||
| Subject: [PATCH] Make ZONE_DMA not depend on CONFIG_EXPERT | ||||
| @ -13,12 +13,12 @@ Signed-off-by: Justin Forbes <jforbes@fedoraproject.org> | ||||
|  2 files changed, 2 insertions(+), 2 deletions(-) | ||||
| 
 | ||||
| diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
 | ||||
| index a02c842..ea2eaeb 100644
 | ||||
| index 3c74b549ea9a..8a5b7b8cc425 100644
 | ||||
| --- a/arch/x86/Kconfig
 | ||||
| +++ b/arch/x86/Kconfig
 | ||||
| @@ -315,7 +315,7 @@ source "kernel/Kconfig.freezer"
 | ||||
| @@ -318,7 +318,7 @@ source "kernel/Kconfig.freezer"
 | ||||
|  menu "Processor type and features" | ||||
| 
 | ||||
|   | ||||
|  config ZONE_DMA | ||||
| -	bool "DMA memory allocation support" if EXPERT
 | ||||
| +	bool "DMA memory allocation support"
 | ||||
| @ -26,18 +26,18 @@ index a02c842..ea2eaeb 100644 | ||||
|  	help | ||||
|  	  DMA memory allocation support allows devices with less than 32-bit | ||||
| diff --git a/mm/Kconfig b/mm/Kconfig
 | ||||
| index 97a4e06..26bbbe0 100644
 | ||||
| index 05efa6a5199e..c1a01e50c293 100644
 | ||||
| --- a/mm/Kconfig
 | ||||
| +++ b/mm/Kconfig
 | ||||
| @@ -650,7 +650,7 @@ config IDLE_PAGE_TRACKING
 | ||||
|  	  See Documentation/vm/idle_page_tracking.txt for more details. | ||||
| 
 | ||||
|   | ||||
|  config ZONE_DEVICE | ||||
| -	bool "Device memory (pmem, etc...) hotplug support" if EXPERT
 | ||||
| +	bool "Device memory (pmem, etc...) hotplug support"
 | ||||
|  	default !ZONE_DMA | ||||
|  	depends on !ZONE_DMA | ||||
|  	depends on MEMORY_HOTPLUG | ||||
|  	depends on MEMORY_HOTREMOVE | ||||
|  	depends on SPARSEMEM_VMEMMAP | ||||
| -- 
 | ||||
| 2.5.0 | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										2
									
								
								gitrev
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								gitrev
									
									
									
									
									
								
							| @ -1 +1 @@ | ||||
| f7813ad5cbfd1fab2899914281b72a1ba0805c80 | ||||
| 6b5f04b6cf8ebab9a65d9c0026c650bb2538fd0f | ||||
|  | ||||
							
								
								
									
										22
									
								
								kernel.spec
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								kernel.spec
									
									
									
									
									
								
							| @ -69,7 +69,7 @@ Summary: The Linux kernel | ||||
| # The rc snapshot level | ||||
| %define rcrev 0 | ||||
| # The git snapshot level | ||||
| %define gitrev 11 | ||||
| %define gitrev 12 | ||||
| # Set rpm version accordingly | ||||
| %define rpmversion 4.%{upstream_sublevel}.0 | ||||
| %endif | ||||
| @ -608,9 +608,6 @@ Patch621: drm-udl-Use-unlocked-gem-unreferencing.patch | ||||
| #Required for some persistent memory options | ||||
| Patch641: disable-CONFIG_EXPERT-for-ZONE_DMA.patch | ||||
| 
 | ||||
| #rhbz 1309658 | ||||
| Patch648: 0001-mm-CONFIG_NR_ZONES_EXTENDED.patch | ||||
| 
 | ||||
| #rhbz 1316136 | ||||
| Patch663: USB-serial-ftdi_sio-Add-support-for-ICP-DAS-I-756xU-.patch | ||||
| 
 | ||||
| @ -631,20 +628,15 @@ Patch668: x86-tsc-Prevent-NULL-pointer-deref-in-calibrate_dela.patch | ||||
| #CVE-2016-3137 rhbz 1317010 1316996 | ||||
| Patch672: cypress_m8-add-sanity-checking.patch | ||||
| 
 | ||||
| #CVE-2016-2188 rhbz 1317018 1317467 | ||||
| Patch674: USB-iowarrior-fix-oops-with-malicious-USB-descriptor.patch | ||||
| 
 | ||||
| #CVE-2016-2185 rhbz 1317014 1317471 | ||||
| Patch675: usb_driver_claim_interface-add-sanity-checking.patch | ||||
| 
 | ||||
| #CVE-2016-3138 rhbz 1317010 1316204 | ||||
| Patch676: cdc-acm-more-sanity-checking.patch | ||||
| 
 | ||||
| #CVE-2016-3140 rhbz 1317010 1316995 | ||||
| Patch677: digi_acceleport-do-sanity-checking-for-the-number-of.patch | ||||
| 
 | ||||
| Patch678: ims-pcu-sanity-check-against-missing-interfaces.patch | ||||
| 
 | ||||
| Patch680: ALSA-hda-Really-restrict-i915-notifier-to-HSW.patch | ||||
| Patch681: ALSA-hda-Fix-forgotten-HDMI-monitor_present-update.patch | ||||
| Patch682: ALSA-hda-Fix-spurious-kernel-WARNING-on-Baytrail-HDM.patch | ||||
| 
 | ||||
| # END OF PATCH DEFINITIONS | ||||
| 
 | ||||
| %endif | ||||
| @ -2167,6 +2159,10 @@ fi | ||||
| # | ||||
| #  | ||||
| %changelog | ||||
| * Sat Mar 19 2016 Josh Boyer <jwboyer@fedoraproject.org> - 4.6.0-0.rc0.git12.1 | ||||
| - Linux v4.5-6486-g6b5f04b6cf8e | ||||
| - cgroup, libata, workqueue, block, akpm, usb merges | ||||
| 
 | ||||
| * Sat Mar 19 2016 Peter Robinson <pbrobinson@fedoraproject.org> | ||||
| - Minor ARM cleanups | ||||
| - Drop ARM_PATCH_IDIV work around | ||||
|  | ||||
							
								
								
									
										1
									
								
								sources
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								sources
									
									
									
									
									
								
							| @ -1,3 +1,4 @@ | ||||
| a60d48eee08ec0536d5efb17ca819aef  linux-4.5.tar.xz | ||||
| 6f557fe90b800b615c85c2ca04da6154  perf-man-4.5.tar.gz | ||||
| 085abf64e5402f2b588b9c64f09a6f44  patch-4.5-git11.xz | ||||
| 54b8c38a01b8b328cb65758b15e1b972  patch-4.5-git12.xz | ||||
|  | ||||
| @ -1,39 +0,0 @@ | ||||
| From de0784bdf6314b70c69416d8c576eb83237d5b1e Mon Sep 17 00:00:00 2001 | ||||
| From: Oliver Neukum <oneukum@suse.com> | ||||
| Date: Wed, 16 Mar 2016 12:26:17 -0400 | ||||
| Subject: [PATCH] usb_driver_claim_interface: add sanity checking | ||||
| 
 | ||||
| Attacks that trick drivers into passing a NULL pointer | ||||
| to usb_driver_claim_interface() using forged descriptors are | ||||
| known. This thwarts them by sanity checking. | ||||
| 
 | ||||
| Signed-off-by: Oliver Neukum <ONeukum@suse.com> | ||||
| CC: stable@vger.kernel.org | ||||
| ---
 | ||||
|  drivers/usb/core/driver.c | 6 +++++- | ||||
|  1 file changed, 5 insertions(+), 1 deletion(-) | ||||
| 
 | ||||
| diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
 | ||||
| index 6b5063e7943f..e2d242b68d4b 100644
 | ||||
| --- a/drivers/usb/core/driver.c
 | ||||
| +++ b/drivers/usb/core/driver.c
 | ||||
| @@ -500,11 +500,15 @@ static int usb_unbind_interface(struct device *dev)
 | ||||
|  int usb_driver_claim_interface(struct usb_driver *driver, | ||||
|  				struct usb_interface *iface, void *priv) | ||||
|  { | ||||
| -	struct device *dev = &iface->dev;
 | ||||
| +	struct device *dev;
 | ||||
|  	struct usb_device *udev; | ||||
|  	int retval = 0; | ||||
|  	int lpm_disable_error; | ||||
|   | ||||
| +	if (!iface)
 | ||||
| +		return -ENODEV;
 | ||||
| +
 | ||||
| +	dev = &iface->dev;
 | ||||
|  	if (dev->driver) | ||||
|  		return -EBUSY; | ||||
|   | ||||
| -- 
 | ||||
| 2.5.0 | ||||
| 
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user