diff --git a/debian/changelog b/debian/changelog index 78414bf5c..66b458ce1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +linux (3.9-1~experimental.1) UNRELEASED; urgency=low + + * New upstream release: http://kernelnewbies.org/Linux_3.9 + + [ Ben Hutchings ] + * [rt] Disable until it is updated for Linux 3.9 or later + + -- Ben Hutchings Mon, 06 May 2013 13:17:52 +0100 + linux (3.8.5-1~experimental.1) experimental; urgency=high * New upstream stable update: diff --git a/debian/config/defines b/debian/config/defines index 1bba971fd..f8db79725 100644 --- a/debian/config/defines +++ b/debian/config/defines @@ -28,7 +28,7 @@ featuresets: rt [featureset-rt_base] -enabled: true +enabled: false [description] part-long-up: This kernel is not suitable for SMP (multi-processor, diff --git a/debian/patches/bugfix/all/KVM-Fix-bounds-checking-in-ioapic-indirect-register-.patch b/debian/patches/bugfix/all/KVM-Fix-bounds-checking-in-ioapic-indirect-register-.patch deleted file mode 100644 index 1fec3af2c..000000000 --- a/debian/patches/bugfix/all/KVM-Fix-bounds-checking-in-ioapic-indirect-register-.patch +++ /dev/null @@ -1,42 +0,0 @@ -From: Andy Honig -Date: Wed, 20 Feb 2013 14:49:16 -0800 -Subject: KVM: Fix bounds checking in ioapic indirect register reads - (CVE-2013-1798) - -commit a2c118bfab8bc6b8bb213abfc35201e441693d55 upstream. - -If the guest specifies a IOAPIC_REG_SELECT with an invalid value and follows -that with a read of the IOAPIC_REG_WINDOW KVM does not properly validate -that request. ioapic_read_indirect contains an -ASSERT(redir_index < IOAPIC_NUM_PINS), but the ASSERT has no effect in -non-debug builds. In recent kernels this allows a guest to cause a kernel -oops by reading invalid memory. In older kernels (pre-3.3) this allows a -guest to read from large ranges of host memory. - -Tested: tested against apic unit tests. - -Signed-off-by: Andrew Honig -Signed-off-by: Marcelo Tosatti ---- - virt/kvm/ioapic.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c -index ce82b94..5ba005c 100644 ---- a/virt/kvm/ioapic.c -+++ b/virt/kvm/ioapic.c -@@ -74,9 +74,12 @@ static unsigned long ioapic_read_indirect(struct kvm_ioapic *ioapic, - u32 redir_index = (ioapic->ioregsel - 0x10) >> 1; - u64 redir_content; - -- ASSERT(redir_index < IOAPIC_NUM_PINS); -+ if (redir_index < IOAPIC_NUM_PINS) -+ redir_content = -+ ioapic->redirtbl[redir_index].bits; -+ else -+ redir_content = ~0ULL; - -- redir_content = ioapic->redirtbl[redir_index].bits; - result = (ioapic->ioregsel & 0x1) ? - (redir_content >> 32) & 0xffffffff : - redir_content & 0xffffffff; diff --git a/debian/patches/bugfix/all/efi_pstore-Introducing-workqueue-updating-sysfs.patch b/debian/patches/bugfix/all/efi_pstore-Introducing-workqueue-updating-sysfs.patch deleted file mode 100644 index 11183c399..000000000 --- a/debian/patches/bugfix/all/efi_pstore-Introducing-workqueue-updating-sysfs.patch +++ /dev/null @@ -1,160 +0,0 @@ -From: Seiji Aguchi -Date: Tue, 12 Feb 2013 13:04:41 -0800 -Subject: efi_pstore: Introducing workqueue updating sysfs - -commit a93bc0c6e07ed9bac44700280e65e2945d864fd4 upstream. - -[Problem] -efi_pstore creates sysfs entries, which enable users to access to NVRAM, -in a write callback. If a kernel panic happens in an interrupt context, -it may fail because it could sleep due to dynamic memory allocations during -creating sysfs entries. - -[Patch Description] -This patch removes sysfs operations from a write callback by introducing -a workqueue updating sysfs entries which is scheduled after the write -callback is called. - -Also, the workqueue is kicked in a just oops case. -A system will go down in other cases such as panic, clean shutdown and emergency -restart. And we don't need to create sysfs entries because there is no chance for -users to access to them. - -efi_pstore will be robust against a kernel panic in an interrupt context with this patch. - -Signed-off-by: Seiji Aguchi -Acked-by: Matt Fleming -Signed-off-by: Tony Luck -[bwh: Backported to 3.8: adjust context] ---- - drivers/firmware/efivars.c | 85 +++++++++++++++++++++++++++++++++++++++++--- - include/linux/efi.h | 3 +- - 2 files changed, 82 insertions(+), 6 deletions(-) - ---- a/drivers/firmware/efivars.c -+++ b/drivers/firmware/efivars.c -@@ -165,6 +165,13 @@ efivar_create_sysfs_entry(struct efivars - efi_char16_t *variable_name, - efi_guid_t *vendor_guid); - -+/* -+ * Prototype for workqueue functions updating sysfs entry -+ */ -+ -+static void efivar_update_sysfs_entries(struct work_struct *); -+static DECLARE_WORK(efivar_work, efivar_update_sysfs_entries); -+ - /* Return the number of unicode characters in data */ - static unsigned long - utf16_strnlen(efi_char16_t *s, size_t maxlength) -@@ -1428,11 +1435,8 @@ static int efi_pstore_write(enum pstore_ - - spin_unlock_irqrestore(&efivars->lock, flags); - -- if (size) -- ret = efivar_create_sysfs_entry(efivars, -- utf16_strsize(efi_name, -- DUMP_NAME_LEN * 2), -- efi_name, &vendor); -+ if (reason == KMSG_DUMP_OOPS) -+ schedule_work(&efivar_work); - - *id = part; - return ret; -@@ -1670,6 +1674,75 @@ static ssize_t efivar_delete(struct file - return count; - } - -+static bool variable_is_present(efi_char16_t *variable_name, efi_guid_t *vendor) -+{ -+ struct efivar_entry *entry, *n; -+ struct efivars *efivars = &__efivars; -+ unsigned long strsize1, strsize2; -+ bool found = false; -+ -+ strsize1 = utf16_strsize(variable_name, 1024); -+ list_for_each_entry_safe(entry, n, &efivars->list, list) { -+ strsize2 = utf16_strsize(entry->var.VariableName, 1024); -+ if (strsize1 == strsize2 && -+ !memcmp(variable_name, &(entry->var.VariableName), -+ strsize2) && -+ !efi_guidcmp(entry->var.VendorGuid, -+ *vendor)) { -+ found = true; -+ break; -+ } -+ } -+ return found; -+} -+ -+static void efivar_update_sysfs_entries(struct work_struct *work) -+{ -+ struct efivars *efivars = &__efivars; -+ efi_guid_t vendor; -+ efi_char16_t *variable_name; -+ unsigned long variable_name_size = 1024; -+ efi_status_t status = EFI_NOT_FOUND; -+ bool found; -+ -+ /* Add new sysfs entries */ -+ while (1) { -+ variable_name = kzalloc(variable_name_size, GFP_KERNEL); -+ if (!variable_name) { -+ pr_err("efivars: Memory allocation failed.\n"); -+ return; -+ } -+ -+ spin_lock_irq(&efivars->lock); -+ found = false; -+ while (1) { -+ variable_name_size = 1024; -+ status = efivars->ops->get_next_variable( -+ &variable_name_size, -+ variable_name, -+ &vendor); -+ if (status != EFI_SUCCESS) { -+ break; -+ } else { -+ if (!variable_is_present(variable_name, -+ &vendor)) { -+ found = true; -+ break; -+ } -+ } -+ } -+ spin_unlock_irq(&efivars->lock); -+ -+ if (!found) { -+ kfree(variable_name); -+ break; -+ } else -+ efivar_create_sysfs_entry(efivars, -+ variable_name_size, -+ variable_name, &vendor); -+ } -+} -+ - /* - * Let's not leave out systab information that snuck into - * the efivars driver -@@ -2000,6 +2073,8 @@ err_put: - static void __exit - efivars_exit(void) - { -+ cancel_work_sync(&efivar_work); -+ - if (efi_enabled(EFI_RUNTIME_SERVICES)) { - unregister_efivars(&__efivars); - kobject_put(efi_kobj); ---- a/include/linux/efi.h -+++ b/include/linux/efi.h -@@ -740,7 +740,8 @@ struct efivars { - * 1) ->list - adds, removals, reads, writes - * 2) ops.[gs]et_variable() calls. - * It must not be held when creating sysfs entries or calling kmalloc. -- * ops.get_next_variable() is only called from register_efivars(), -+ * ops.get_next_variable() is only called from register_efivars() -+ * or efivar_update_sysfs_entries(), - * which is protected by the BKL, so that path is safe. - */ - spinlock_t lock; diff --git a/debian/patches/bugfix/all/efivars-Handle-duplicate-names-from-get_next_variabl.patch b/debian/patches/bugfix/all/efivars-Handle-duplicate-names-from-get_next_variabl.patch deleted file mode 100644 index bbff6c362..000000000 --- a/debian/patches/bugfix/all/efivars-Handle-duplicate-names-from-get_next_variabl.patch +++ /dev/null @@ -1,156 +0,0 @@ -From: Matt Fleming -Date: Thu, 7 Mar 2013 11:59:14 +0000 -Subject: efivars: Handle duplicate names from get_next_variable() - -commit e971318bbed610e28bb3fde9d548e6aaf0a6b02e upstream. - -Some firmware exhibits a bug where the same VariableName and -VendorGuid values are returned on multiple invocations of -GetNextVariableName(). See, - - https://bugzilla.kernel.org/show_bug.cgi?id=47631 - -As a consequence of such a bug, Andre reports hitting the following -WARN_ON() in the sysfs code after updating the BIOS on his, "Gigabyte -Technology Co., Ltd. To be filled by O.E.M./Z77X-UD3H, BIOS F19e -11/21/2012)" machine, - -[ 0.581554] EFI Variables Facility v0.08 2004-May-17 -[ 0.584914] ------------[ cut here ]------------ -[ 0.585639] WARNING: at /home/andre/linux/fs/sysfs/dir.c:536 sysfs_add_one+0xd4/0x100() -[ 0.586381] Hardware name: To be filled by O.E.M. -[ 0.587123] sysfs: cannot create duplicate filename '/firmware/efi/vars/SbAslBufferPtrVar-01f33c25-764d-43ea-aeea-6b5a41f3f3e8' -[ 0.588694] Modules linked in: -[ 0.589484] Pid: 1, comm: swapper/0 Not tainted 3.8.0+ #7 -[ 0.590280] Call Trace: -[ 0.591066] [] ? sysfs_add_one+0xd4/0x100 -[ 0.591861] [] warn_slowpath_common+0x7f/0xc0 -[ 0.592650] [] warn_slowpath_fmt+0x4c/0x50 -[ 0.593429] [] ? strlcat+0x65/0x80 -[ 0.594203] [] sysfs_add_one+0xd4/0x100 -[ 0.594979] [] create_dir+0x78/0xd0 -[ 0.595753] [] sysfs_create_dir+0x86/0xe0 -[ 0.596532] [] kobject_add_internal+0x9c/0x220 -[ 0.597310] [] kobject_init_and_add+0x67/0x90 -[ 0.598083] [] ? efivar_create_sysfs_entry+0x61/0x1c0 -[ 0.598859] [] efivar_create_sysfs_entry+0x11b/0x1c0 -[ 0.599631] [] register_efivars+0xde/0x420 -[ 0.600395] [] ? edd_init+0x2f5/0x2f5 -[ 0.601150] [] efivars_init+0xb8/0x104 -[ 0.601903] [] do_one_initcall+0x12a/0x180 -[ 0.602659] [] kernel_init_freeable+0x13e/0x1c6 -[ 0.603418] [] ? loglevel+0x31/0x31 -[ 0.604183] [] ? rest_init+0x80/0x80 -[ 0.604936] [] kernel_init+0xe/0xf0 -[ 0.605681] [] ret_from_fork+0x7c/0xb0 -[ 0.606414] [] ? rest_init+0x80/0x80 -[ 0.607143] ---[ end trace 1609741ab737eb29 ]--- - -There's not much we can do to work around and keep traversing the -variable list once we hit this firmware bug. Our only solution is to -terminate the loop because, as Lingzhu reports, some machines get -stuck when they encounter duplicate names, - - > I had an IBM System x3100 M4 and x3850 X5 on which kernel would - > get stuck in infinite loop creating duplicate sysfs files because, - > for some reason, there are several duplicate boot entries in nvram - > getting GetNextVariableName into a circle of iteration (with - > period > 2). - -Also disable the workqueue, as efivar_update_sysfs_entries() uses -GetNextVariableName() to figure out which variables have been created -since the last iteration. That algorithm isn't going to work if -GetNextVariableName() returns duplicates. Note that we don't disable -EFI variable creation completely on the affected machines, it's just -that any pstore dump-* files won't appear in sysfs until the next -boot. - -Reported-by: Andre Heider -Reported-by: Lingzhu Xiang -Tested-by: Lingzhu Xiang -Cc: Seiji Aguchi -Signed-off-by: Matt Fleming ---- - drivers/firmware/efivars.c | 48 +++++++++++++++++++++++++++++++++++++++++++- - 1 file changed, 47 insertions(+), 1 deletion(-) - -diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c -index 1e9d9b9..d64661f 100644 ---- a/drivers/firmware/efivars.c -+++ b/drivers/firmware/efivars.c -@@ -170,6 +170,7 @@ efivar_create_sysfs_entry(struct efivars *efivars, - - static void efivar_update_sysfs_entries(struct work_struct *); - static DECLARE_WORK(efivar_work, efivar_update_sysfs_entries); -+static bool efivar_wq_enabled = true; - - /* Return the number of unicode characters in data */ - static unsigned long -@@ -1444,7 +1445,7 @@ static int efi_pstore_write(enum pstore_type_id type, - - spin_unlock_irqrestore(&efivars->lock, flags); - -- if (reason == KMSG_DUMP_OOPS) -+ if (reason == KMSG_DUMP_OOPS && efivar_wq_enabled) - schedule_work(&efivar_work); - - *id = part; -@@ -1975,6 +1976,35 @@ void unregister_efivars(struct efivars *efivars) - } - EXPORT_SYMBOL_GPL(unregister_efivars); - -+/* -+ * Print a warning when duplicate EFI variables are encountered and -+ * disable the sysfs workqueue since the firmware is buggy. -+ */ -+static void dup_variable_bug(efi_char16_t *s16, efi_guid_t *vendor_guid, -+ unsigned long len16) -+{ -+ size_t i, len8 = len16 / sizeof(efi_char16_t); -+ char *s8; -+ -+ /* -+ * Disable the workqueue since the algorithm it uses for -+ * detecting new variables won't work with this buggy -+ * implementation of GetNextVariableName(). -+ */ -+ efivar_wq_enabled = false; -+ -+ s8 = kzalloc(len8, GFP_KERNEL); -+ if (!s8) -+ return; -+ -+ for (i = 0; i < len8; i++) -+ s8[i] = s16[i]; -+ -+ printk(KERN_WARNING "efivars: duplicate variable: %s-%pUl\n", -+ s8, vendor_guid); -+ kfree(s8); -+} -+ - int register_efivars(struct efivars *efivars, - const struct efivar_operations *ops, - struct kobject *parent_kobj) -@@ -2025,6 +2055,22 @@ int register_efivars(struct efivars *efivars, - case EFI_SUCCESS: - variable_name_size = var_name_strnsize(variable_name, - variable_name_size); -+ -+ /* -+ * Some firmware implementations return the -+ * same variable name on multiple calls to -+ * get_next_variable(). Terminate the loop -+ * immediately as there is no guarantee that -+ * we'll ever see a different variable name, -+ * and may end up looping here forever. -+ */ -+ if (variable_is_present(variable_name, &vendor_guid)) { -+ dup_variable_bug(variable_name, &vendor_guid, -+ variable_name_size); -+ status = EFI_NOT_FOUND; -+ break; -+ } -+ - efivar_create_sysfs_entry(efivars, - variable_name_size, - variable_name, diff --git a/debian/patches/bugfix/all/efivars-explicitly-calculate-length-of-VariableName.patch b/debian/patches/bugfix/all/efivars-explicitly-calculate-length-of-VariableName.patch deleted file mode 100644 index ddfa2ec95..000000000 --- a/debian/patches/bugfix/all/efivars-explicitly-calculate-length-of-VariableName.patch +++ /dev/null @@ -1,101 +0,0 @@ -From: Matt Fleming -Date: Fri, 1 Mar 2013 14:49:12 +0000 -Subject: efivars: explicitly calculate length of VariableName - -commit ec50bd32f1672d38ddce10fb1841cbfda89cfe9a upstream. - -It's not wise to assume VariableNameSize represents the length of -VariableName, as not all firmware updates VariableNameSize in the same -way (some don't update it at all if EFI_SUCCESS is returned). There -are even implementations out there that update VariableNameSize with -values that are both larger than the string returned in VariableName -and smaller than the buffer passed to GetNextVariableName(), which -resulted in the following bug report from Michael Schroeder, - - > On HP z220 system (firmware version 1.54), some EFI variables are - > incorrectly named : - > - > ls -d /sys/firmware/efi/vars/*8be4d* | grep -v -- -8be returns - > /sys/firmware/efi/vars/dbxDefault-pport8be4df61-93ca-11d2-aa0d-00e098032b8c - > /sys/firmware/efi/vars/KEKDefault-pport8be4df61-93ca-11d2-aa0d-00e098032b8c - > /sys/firmware/efi/vars/SecureBoot-pport8be4df61-93ca-11d2-aa0d-00e098032b8c - > /sys/firmware/efi/vars/SetupMode-Information8be4df61-93ca-11d2-aa0d-00e098032b8c - -The issue here is that because we blindly use VariableNameSize without -verifying its value, we can potentially read garbage values from the -buffer containing VariableName if VariableNameSize is larger than the -length of VariableName. - -Since VariableName is a string, we can calculate its size by searching -for the terminating NULL character. - -Reported-by: Frederic Crozat -Cc: Matthew Garrett -Cc: Josh Boyer -Cc: Michael Schroeder -Cc: Lee, Chun-Yi -Cc: Lingzhu Xiang -Cc: Seiji Aguchi -Signed-off-by: Matt Fleming ---- - drivers/firmware/efivars.c | 32 +++++++++++++++++++++++++++++++- - 1 file changed, 31 insertions(+), 1 deletion(-) - ---- a/drivers/firmware/efivars.c -+++ b/drivers/firmware/efivars.c -@@ -1044,6 +1044,31 @@ static bool variable_is_present(efi_char - return found; - } - -+/* -+ * Returns the size of variable_name, in bytes, including the -+ * terminating NULL character, or variable_name_size if no NULL -+ * character is found among the first variable_name_size bytes. -+ */ -+static unsigned long var_name_strnsize(efi_char16_t *variable_name, -+ unsigned long variable_name_size) -+{ -+ unsigned long len; -+ efi_char16_t c; -+ -+ /* -+ * The variable name is, by definition, a NULL-terminated -+ * string, so make absolutely sure that variable_name_size is -+ * the value we expect it to be. If not, return the real size. -+ */ -+ for (len = 2; len <= variable_name_size; len += sizeof(c)) { -+ c = variable_name[(len / sizeof(c)) - 1]; -+ if (!c) -+ break; -+ } -+ -+ return min(len, variable_name_size); -+} -+ - static void efivar_update_sysfs_entries(struct work_struct *work) - { - struct efivars *efivars = &__efivars; -@@ -1084,10 +1109,13 @@ static void efivar_update_sysfs_entries( - if (!found) { - kfree(variable_name); - break; -- } else -+ } else { -+ variable_name_size = var_name_strnsize(variable_name, -+ variable_name_size); - efivar_create_sysfs_entry(efivars, - variable_name_size, - variable_name, &vendor); -+ } - } - } - -@@ -1318,6 +1346,8 @@ int register_efivars(struct efivars *efi - &vendor_guid); - switch (status) { - case EFI_SUCCESS: -+ variable_name_size = var_name_strnsize(variable_name, -+ variable_name_size); - efivar_create_sysfs_entry(efivars, - variable_name_size, - variable_name, diff --git a/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch b/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch index 290954c07..20550588c 100644 --- a/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch +++ b/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch @@ -95,7 +95,7 @@ upstream submission. fw_size = firmware->size / sizeof(u32); --- a/drivers/bluetooth/ath3k.c +++ b/drivers/bluetooth/ath3k.c -@@ -317,10 +317,8 @@ static int ath3k_load_patch(struct usb_d +@@ -325,10 +325,8 @@ static int ath3k_load_patch(struct usb_d fw_version.rom_version); ret = request_firmware(&firmware, filename, &udev->dev); @@ -107,7 +107,7 @@ upstream submission. pt_version.rom_version = *(int *)(firmware->data + firmware->size - 8); pt_version.build_version = *(int *) -@@ -379,10 +377,8 @@ static int ath3k_load_syscfg(struct usb_ +@@ -387,10 +385,8 @@ static int ath3k_load_syscfg(struct usb_ fw_version.rom_version, clk_value, ".dfu"); ret = request_firmware(&firmware, filename, &udev->dev); @@ -231,7 +231,7 @@ upstream submission. where = 0; --- a/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c +++ b/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c -@@ -497,10 +497,8 @@ nvc0_graph_ctor_fw(struct nvc0_graph_pri +@@ -499,10 +499,8 @@ nvc0_graph_ctor_fw(struct nvc0_graph_pri if (ret) { snprintf(f, sizeof(f), "nouveau/%s", fwname); ret = request_firmware(&fw, f, &device->pdev->dev); @@ -260,7 +260,7 @@ upstream submission. printk(KERN_ERR --- a/drivers/gpu/drm/radeon/ni.c +++ b/drivers/gpu/drm/radeon/ni.c -@@ -398,10 +398,6 @@ out: +@@ -400,10 +400,6 @@ out: platform_device_unregister(pdev); if (err) { @@ -287,7 +287,7 @@ upstream submission. rdev->me_fw->size, fw_name); --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c -@@ -2099,10 +2099,6 @@ out: +@@ -2248,10 +2248,6 @@ out: platform_device_unregister(pdev); if (err) { @@ -300,7 +300,7 @@ upstream submission. release_firmware(rdev->me_fw); --- a/drivers/gpu/drm/radeon/r600_cp.c +++ b/drivers/gpu/drm/radeon/r600_cp.c -@@ -374,10 +374,6 @@ out: +@@ -376,10 +376,6 @@ out: platform_device_unregister(pdev); if (err) { @@ -313,7 +313,7 @@ upstream submission. release_firmware(dev_priv->me_fw); --- a/drivers/gpu/drm/radeon/radeon_cp.c +++ b/drivers/gpu/drm/radeon/radeon_cp.c -@@ -528,10 +528,7 @@ static int radeon_cp_init_microcode(drm_ +@@ -530,10 +530,7 @@ static int radeon_cp_init_microcode(drm_ err = request_firmware(&dev_priv->me_fw, fw_name, &pdev->dev); platform_device_unregister(pdev); @@ -341,7 +341,7 @@ upstream submission. ret = qib_ibsd_ucode_loaded(dd->pport, fw); --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c -@@ -954,10 +954,8 @@ static int mxt_load_fw(struct device *de +@@ -986,10 +986,8 @@ static int mxt_load_fw(struct device *de int ret; ret = request_firmware(&fw, fn, dev); @@ -548,7 +548,7 @@ upstream submission. /* --- a/drivers/media/dvb-frontends/ds3000.c +++ b/drivers/media/dvb-frontends/ds3000.c -@@ -401,12 +401,8 @@ static int ds3000_firmware_ondemand(stru +@@ -362,12 +362,8 @@ static int ds3000_firmware_ondemand(stru DS3000_DEFAULT_FIRMWARE); ret = request_firmware(&fw, DS3000_DEFAULT_FIRMWARE, state->i2c->dev.parent); @@ -609,14 +609,14 @@ upstream submission. if (ret) { --- a/drivers/media/dvb-frontends/or51211.c +++ b/drivers/media/dvb-frontends/or51211.c -@@ -379,12 +379,8 @@ static int or51211_init(struct dvb_front - "(%s)...\n", OR51211_DEFAULT_FIRMWARE); +@@ -375,12 +375,8 @@ static int or51211_init(struct dvb_front + OR51211_DEFAULT_FIRMWARE); ret = config->request_firmware(fe, &fw, OR51211_DEFAULT_FIRMWARE); -- printk(KERN_INFO "or51211:Got Hotplug firmware\n"); +- pr_info("Got Hotplug firmware\n"); - if (ret) { -- printk(KERN_WARNING "or51211: No firmware uploaded " -- "(timeout or file not found?)\n"); +- pr_warn("No firmware uploaded " +- "(timeout or file not found?)\n"); + if (ret) return ret; - } @@ -963,7 +963,7 @@ upstream submission. printk(KERN_ERR "ERROR: Firmware size mismatch " --- a/drivers/media/pci/cx23885/cx23885-cards.c +++ b/drivers/media/pci/cx23885/cx23885-cards.c -@@ -1681,11 +1681,7 @@ void cx23885_card_setup(struct cx23885_d +@@ -1795,11 +1795,7 @@ void cx23885_card_setup(struct cx23885_d cinfo.rev, filename); ret = request_firmware(&fw, filename, &dev->pci->dev); @@ -1066,7 +1066,7 @@ upstream submission. --- a/drivers/media/usb/s2255/s2255drv.c +++ b/drivers/media/usb/s2255/s2255drv.c -@@ -2587,10 +2587,8 @@ static int s2255_probe(struct usb_interf +@@ -2585,10 +2585,8 @@ static int s2255_probe(struct usb_interf } /* load the first chunk */ if (request_firmware(&dev->fw_data->fw, @@ -1080,7 +1080,7 @@ upstream submission. pdata = (__le32 *) &dev->fw_data->fw->data[fw_size - 8]; --- a/drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c -@@ -40,10 +40,8 @@ int s5p_mfc_alloc_and_load_firmware(stru +@@ -88,10 +88,8 @@ int s5p_mfc_load_firmware(struct s5p_mfc err = request_firmware((const struct firmware **)&fw_blob, dev->variant->fw_name, dev->v4l2_dev.dev); @@ -1089,10 +1089,10 @@ upstream submission. + if (err != 0) return -EINVAL; - } - dev->fw_size = dev->variant->buf_size->fw; if (fw_blob->size > dev->fw_size) { mfc_err("MFC firmware is too big to be loaded\n"); -@@ -133,10 +131,8 @@ int s5p_mfc_reload_firmware(struct s5p_m + release_firmware(fw_blob); +@@ -121,10 +119,8 @@ int s5p_mfc_reload_firmware(struct s5p_m err = request_firmware((const struct firmware **)&fw_blob, dev->variant->fw_name, dev->v4l2_dev.dev); @@ -1245,7 +1245,7 @@ upstream submission. if (bp->mips_firmware->size < sizeof(*mips_fw) || --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c -@@ -11939,11 +11939,8 @@ static int bnx2x_init_firmware(struct bn +@@ -12166,11 +12166,8 @@ static int bnx2x_init_firmware(struct bn BNX2X_DEV_INFO("Loading %s\n", fw_file_name); rc = request_firmware(&bp->firmware, fw_file_name, &bp->pdev->dev); @@ -1260,7 +1260,7 @@ upstream submission. if (rc) { --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c -@@ -10449,11 +10449,8 @@ static int tg3_request_firmware(struct t +@@ -10572,11 +10572,8 @@ static int tg3_request_firmware(struct t { const __be32 *fw_data; @@ -1289,7 +1289,7 @@ upstream submission. *bfi_image_size = fw->size/sizeof(u32); --- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c +++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c -@@ -1030,12 +1030,8 @@ int t3_get_edc_fw(struct cphy *phy, int +@@ -1034,12 +1034,8 @@ int t3_get_edc_fw(struct cphy *phy, int snprintf(buf, sizeof(buf), get_edc_fw_name(edc_idx)); ret = request_firmware(&fw, buf, &adapter->pdev->dev); @@ -1303,7 +1303,7 @@ upstream submission. /* check size, take checksum in account */ if (fw->size > size + 4) { -@@ -1072,11 +1068,8 @@ static int upgrade_fw(struct adapter *ad +@@ -1076,11 +1072,8 @@ static int upgrade_fw(struct adapter *ad struct device *dev = &adap->pdev->dev; ret = request_firmware(&fw, FW_FNAME, dev); @@ -1316,7 +1316,7 @@ upstream submission. ret = t3_load_fw(adap, fw->data, fw->size); release_firmware(fw); -@@ -1121,11 +1114,8 @@ static int update_tpsram(struct adapter +@@ -1125,11 +1118,8 @@ static int update_tpsram(struct adapter snprintf(buf, sizeof(buf), TPSRAM_NAME, rev); ret = request_firmware(&tpsram, buf, dev); @@ -1346,7 +1346,7 @@ upstream submission. vers = ntohl(hdr->fw_ver); --- a/drivers/net/ethernet/intel/e100.c +++ b/drivers/net/ethernet/intel/e100.c -@@ -1289,9 +1289,6 @@ static const struct firmware *e100_reque +@@ -1293,9 +1293,6 @@ static const struct firmware *e100_reque if (err) { if (required) { @@ -1427,7 +1427,7 @@ upstream submission. dev_err(&kaweth->intf->dev, "Firmware too big: %zu\n", --- a/drivers/net/wimax/i2400m/fw.c +++ b/drivers/net/wimax/i2400m/fw.c -@@ -1583,11 +1583,8 @@ int i2400m_dev_bootstrap(struct i2400m * +@@ -1582,11 +1582,8 @@ int i2400m_dev_bootstrap(struct i2400m * } d_printf(1, dev, "trying firmware %s (%d)\n", fw_name, itr); ret = request_firmware(&fw, fw_name, dev); @@ -1440,7 +1440,7 @@ upstream submission. i2400m->fw_name = fw_name; ret = i2400m_fw_bootstrap(i2400m, fw, flags); release_firmware(fw); -@@ -1630,8 +1627,6 @@ void i2400m_fw_cache(struct i2400m *i240 +@@ -1629,8 +1626,6 @@ void i2400m_fw_cache(struct i2400m *i240 kref_init(&i2400m_fw->kref); result = request_firmware(&i2400m_fw->fw, i2400m->fw_name, dev); if (result < 0) { @@ -1548,7 +1548,7 @@ upstream submission. hdr = (struct b43legacy_fw_header *)((*fw)->data); --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c -@@ -3208,10 +3208,8 @@ static int brcmf_sdbrcm_download_code_fi +@@ -3179,10 +3179,8 @@ static int brcmf_sdbrcm_download_code_fi ret = request_firmware(&bus->firmware, BRCMF_SDIO_FW_NAME, &bus->sdiodev->func[2]->dev); @@ -1560,7 +1560,7 @@ upstream submission. bus->fw_ptr = 0; memptr = memblock = kmalloc(MEMBLOCK + BRCMF_SDALIGN, GFP_ATOMIC); -@@ -3327,10 +3325,8 @@ static int brcmf_sdbrcm_download_nvram(s +@@ -3295,10 +3293,8 @@ static int brcmf_sdbrcm_download_nvram(s ret = request_firmware(&bus->firmware, BRCMF_SDIO_NV_NAME, &bus->sdiodev->func[2]->dev); @@ -1574,7 +1574,7 @@ upstream submission. --- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c -@@ -807,19 +807,13 @@ static int brcms_request_fw(struct brcms +@@ -376,19 +376,13 @@ static int brcms_request_fw(struct brcms sprintf(fw_name, "%s-%d.fw", brcms_firmwares[i], UCODE_LOADER_API_VER); status = request_firmware(&wl->fw.fw_bin[i], fw_name, device); @@ -1598,7 +1598,7 @@ upstream submission. } --- a/drivers/net/wireless/ipw2x00/ipw2100.c +++ b/drivers/net/wireless/ipw2x00/ipw2100.c -@@ -8464,12 +8464,8 @@ static int ipw2100_get_firmware(struct i +@@ -8446,12 +8446,8 @@ static int ipw2100_get_firmware(struct i rc = request_firmware(&fw->fw_entry, fw_name, &priv->pci_dev->dev); @@ -1628,7 +1628,7 @@ upstream submission. IPW_ERROR("%s is too small (%zd)\n", name, (*raw)->size); --- a/drivers/net/wireless/iwlegacy/3945-mac.c +++ b/drivers/net/wireless/iwlegacy/3945-mac.c -@@ -1846,7 +1846,6 @@ il3945_read_ucode(struct il_priv *il) +@@ -1866,7 +1866,6 @@ il3945_read_ucode(struct il_priv *il) sprintf(buf, "%s%u%s", name_pre, idx, ".ucode"); ret = request_firmware(&ucode_raw, buf, &il->pci_dev->dev); if (ret < 0) { @@ -1638,7 +1638,7 @@ upstream submission. else --- a/drivers/net/wireless/iwlwifi/iwl-drv.c +++ b/drivers/net/wireless/iwlwifi/iwl-drv.c -@@ -846,13 +846,8 @@ static void iwl_req_fw_callback(const st +@@ -852,13 +852,8 @@ static void iwl_req_fw_callback(const st memset(&pieces, 0, sizeof(pieces)); @@ -1681,7 +1681,7 @@ upstream submission. adapter->firmware = firmware; --- a/drivers/net/wireless/mwl8k.c +++ b/drivers/net/wireless/mwl8k.c -@@ -5320,16 +5320,12 @@ static int mwl8k_firmware_load_success(s +@@ -5497,16 +5497,12 @@ static int mwl8k_firmware_load_success(s static void mwl8k_fw_state_machine(const struct firmware *fw, void *context) { struct mwl8k_priv *priv = context; @@ -1699,7 +1699,7 @@ upstream submission. priv->fw_helper = fw; rc = mwl8k_request_fw(priv, priv->fw_pref, &priv->fw_ucode, true); -@@ -5364,11 +5360,8 @@ static void mwl8k_fw_state_machine(const +@@ -5541,11 +5537,8 @@ static void mwl8k_fw_state_machine(const break; case FW_STATE_LOADING_ALT: @@ -1712,7 +1712,7 @@ upstream submission. priv->fw_ucode = fw; rc = mwl8k_firmware_load_success(priv); if (rc) -@@ -5406,10 +5399,8 @@ retry: +@@ -5583,10 +5576,8 @@ retry: /* Ask userland hotplug daemon for the device firmware */ rc = mwl8k_request_firmware(priv, fw_image, nowait); @@ -1760,9 +1760,9 @@ upstream submission. --- a/drivers/net/wireless/orinoco/orinoco_usb.c +++ b/drivers/net/wireless/orinoco/orinoco_usb.c -@@ -1683,7 +1683,6 @@ static int ezusb_probe(struct usb_interf - if (firmware.size && firmware.code) { - ezusb_firmware_download(upriv, &firmware); +@@ -1690,7 +1690,6 @@ static int ezusb_probe(struct usb_interf + if (ezusb_firmware_download(upriv, &firmware)) + goto error; } else { - err("No firmware to download"); goto error; @@ -1794,7 +1794,7 @@ upstream submission. if (ret) { --- a/drivers/net/wireless/p54/p54usb.c +++ b/drivers/net/wireless/p54/p54usb.c -@@ -935,7 +935,6 @@ static void p54u_load_firmware_cb(const +@@ -929,7 +929,6 @@ static void p54u_load_firmware_cb(const err = p54u_start_ops(priv); } else { err = -ENOENT; @@ -1881,7 +1881,7 @@ upstream submission. wl1251_error("nvs size is not multiple of 32 bits: %zu", --- a/drivers/net/wireless/ti/wlcore/main.c +++ b/drivers/net/wireless/ti/wlcore/main.c -@@ -712,10 +712,8 @@ static int wl12xx_fetch_firmware(struct +@@ -723,10 +723,8 @@ static int wl12xx_fetch_firmware(struct ret = request_firmware(&fw, fw_name, wl->dev); @@ -2000,7 +2000,7 @@ upstream submission. } --- a/drivers/scsi/ipr.c +++ b/drivers/scsi/ipr.c -@@ -3779,10 +3779,8 @@ static ssize_t ipr_store_update_fw(struc +@@ -3907,10 +3907,8 @@ static ssize_t ipr_store_update_fw(struc len = snprintf(fname, 99, "%s", buf); fname[len-1] = '\0'; @@ -2037,7 +2037,7 @@ upstream submission. } --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c -@@ -5020,8 +5020,6 @@ qla2x00_load_risc(scsi_qla_host_t *vha, +@@ -5108,8 +5108,6 @@ qla2x00_load_risc(scsi_qla_host_t *vha, /* Load firmware blob. */ blob = qla2x00_request_firmware(vha); if (!blob) { @@ -2046,7 +2046,7 @@ upstream submission. ql_log(ql_log_info, vha, 0x0084, "Firmware images can be retrieved from: "QLA_FW_URL ".\n"); return QLA_FUNCTION_FAILED; -@@ -5122,8 +5120,6 @@ qla24xx_load_risc_blob(scsi_qla_host_t * +@@ -5210,8 +5208,6 @@ qla24xx_load_risc_blob(scsi_qla_host_t * /* Load firmware blob. */ blob = qla2x00_request_firmware(vha); if (!blob) { @@ -2057,7 +2057,7 @@ upstream submission. QLA_FW_URL ".\n"); --- a/drivers/scsi/qla2xxx/qla_nx.c +++ b/drivers/scsi/qla2xxx/qla_nx.c -@@ -2440,11 +2440,8 @@ try_blob_fw: +@@ -2447,11 +2447,8 @@ try_blob_fw: /* Load firmware blob. */ blob = ha->hablob = qla2x00_request_firmware(vha); @@ -2072,7 +2072,7 @@ upstream submission. if (qla82xx_validate_firmware_blob(vha, --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c -@@ -4902,8 +4902,6 @@ qla2x00_request_firmware(scsi_qla_host_t +@@ -5017,8 +5017,6 @@ qla2x00_request_firmware(scsi_qla_host_t goto out; if (request_firmware(&blob->fw, blob->name, &ha->pdev->dev)) { @@ -2098,7 +2098,7 @@ upstream submission. fw->size, fwname); --- a/drivers/staging/comedi/drivers/usbdux.c +++ b/drivers/staging/comedi/drivers/usbdux.c -@@ -2371,11 +2371,8 @@ static void usbdux_firmware_request_comp +@@ -2378,11 +2378,8 @@ static void usbdux_firmware_request_comp struct usb_interface *uinterf = usbduxsub_tmp->interface; int ret; @@ -2113,7 +2113,7 @@ upstream submission. * we need to upload the firmware here because fw will be --- a/drivers/staging/comedi/drivers/usbduxsigma.c +++ b/drivers/staging/comedi/drivers/usbduxsigma.c -@@ -2357,11 +2357,8 @@ static void usbdux_firmware_request_comp +@@ -2364,11 +2364,8 @@ static void usbdux_firmware_request_comp struct usb_interface *uinterf = usbduxsub_tmp->interface; int ret; @@ -2128,7 +2128,7 @@ upstream submission. * we need to upload the firmware here because fw will be --- a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c +++ b/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c -@@ -2193,16 +2193,12 @@ struct net_device *init_ft1000_card(stru +@@ -2203,16 +2203,12 @@ struct net_device *init_ft1000_card(stru info->AsicID = ft1000_read_reg(dev, FT1000_REG_ASIC_ID); if (info->AsicID == ELECTRABUZZ_ID) { DEBUG(0, "ft1000_hw: ELECTRABUZZ ASIC\n"); @@ -2149,7 +2149,7 @@ upstream submission. ft1000_enable_interrupts(dev); --- a/drivers/staging/ft1000/ft1000-usb/ft1000_usb.c +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_usb.c -@@ -137,10 +137,8 @@ static int ft1000_probe(struct usb_inter +@@ -134,10 +134,8 @@ static int ft1000_probe(struct usb_inter ft1000dev->bulk_out_endpointAddr); ret = request_firmware(&dsp_fw, "ft3000.img", &dev->dev); @@ -2206,7 +2206,7 @@ upstream submission. "go7007 firmware\n", fw_name); --- a/drivers/staging/media/go7007/go7007-fw.c +++ b/drivers/staging/media/go7007/go7007-fw.c -@@ -1575,12 +1575,8 @@ int go7007_construct_fw_image(struct go7 +@@ -1568,12 +1568,8 @@ int go7007_construct_fw_image(struct go7 default: return -1; } @@ -2218,8 +2218,8 @@ upstream submission. return -1; - } code = kzalloc(codespace * 2, GFP_KERNEL); - if (code == NULL) { - dev_err(go->dev, + if (code == NULL) + goto fw_failed; --- a/drivers/staging/media/go7007/s2250-loader.c +++ b/drivers/staging/media/go7007/s2250-loader.c @@ -98,12 +98,8 @@ static int s2250loader_probe(struct usb_ @@ -2227,7 +2227,7 @@ upstream submission. mutex_unlock(&s2250_dev_table_mutex); - if (request_firmware(&fw, S2250_LOADER_FIRMWARE, &usbdev->dev)) { -- printk(KERN_ERR +- dev_err(&interface->dev, - "s2250: unable to load firmware from file \"%s\"\n", - S2250_LOADER_FIRMWARE); + if (request_firmware(&fw, S2250_LOADER_FIRMWARE, &usbdev->dev)) @@ -2241,7 +2241,7 @@ upstream submission. } - if (request_firmware(&fw, S2250_FIRMWARE, &usbdev->dev)) { -- printk(KERN_ERR +- dev_err(&interface->dev, - "s2250: unable to load firmware from file \"%s\"\n", - S2250_FIRMWARE); + if (request_firmware(&fw, S2250_FIRMWARE, &usbdev->dev)) @@ -2281,7 +2281,7 @@ upstream submission. if (!firmware) { struct usb_device *udev = padapter->dvobjpriv.pusbdev; struct usb_interface *pusb_intf = padapter->pusb_intf; -- printk(KERN_ERR "r8712u: Firmware request failed\n"); +- dev_err(&udev->dev, "r8712u: Firmware request failed\n"); padapter->fw_found = false; usb_put_dev(udev); usb_set_intfdata(pusb_intf, NULL); @@ -2315,7 +2315,7 @@ upstream submission. for (i = 0; i < numsects; i++) { --- a/drivers/staging/vt6656/firmware.c +++ b/drivers/staging/vt6656/firmware.c -@@ -74,11 +74,8 @@ FIRMWAREbDownload( +@@ -71,11 +71,8 @@ int FIRMWAREbDownload(struct vnt_private spin_unlock_irq(&pDevice->lock); rc = request_firmware(&fw, FIRMWARE_NAME, dev); @@ -2331,7 +2331,7 @@ upstream submission. if (!pBuffer) --- a/drivers/tty/cyclades.c +++ b/drivers/tty/cyclades.c -@@ -3539,10 +3539,8 @@ static int cyz_load_fw(struct pci_dev *p +@@ -3526,10 +3526,8 @@ static int cyz_load_fw(struct pci_dev *p int retval; retval = request_firmware(&fw, "cyzfirm.bin", &pdev->dev); @@ -2542,7 +2542,7 @@ upstream submission. } --- a/drivers/usb/serial/io_edgeport.c +++ b/drivers/usb/serial/io_edgeport.c -@@ -306,11 +306,8 @@ static void update_edgeport_E2PROM(struc +@@ -305,11 +305,8 @@ static void update_edgeport_E2PROM(struc response = request_ihex_firmware(&fw, fw_name, &edge_serial->serial->dev->dev); @@ -2557,7 +2557,7 @@ upstream submission. BootMajorVersion = rec->data[0]; --- a/drivers/usb/serial/io_ti.c +++ b/drivers/usb/serial/io_ti.c -@@ -844,8 +844,6 @@ static int build_i2c_fw_hdr(__u8 *header +@@ -782,8 +782,6 @@ static int build_i2c_fw_hdr(__u8 *header err = request_firmware(&fw, fw_name, dev); if (err) { @@ -2566,7 +2566,7 @@ upstream submission. kfree(buffer); return err; } -@@ -1403,8 +1401,6 @@ static int download_fw(struct edgeport_s +@@ -1341,8 +1339,6 @@ static int download_fw(struct edgeport_s err = request_firmware(&fw, fw_name, dev); if (err) { @@ -2577,7 +2577,7 @@ upstream submission. } --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c -@@ -1659,10 +1659,8 @@ static int ti_download_firmware(struct t +@@ -1653,10 +1653,8 @@ static int ti_download_firmware(struct t } status = request_firmware(&fw_p, buf, &dev->dev); } @@ -2747,7 +2747,7 @@ upstream submission. } --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c -@@ -3424,11 +3424,8 @@ static void azx_firmware_cb(const struct +@@ -3633,11 +3633,8 @@ static void azx_firmware_cb(const struct struct azx *chip = card->private_data; struct pci_dev *pci = chip->pci; @@ -2816,7 +2816,7 @@ upstream submission. if (err) { --- a/sound/pci/rme9652/hdsp.c +++ b/sound/pci/rme9652/hdsp.c -@@ -5378,10 +5378,8 @@ static int hdsp_request_fw_loader(struct +@@ -5150,10 +5150,8 @@ static int hdsp_request_fw_loader(struct return -EINVAL; } @@ -2830,7 +2830,7 @@ upstream submission. (int)fw->size, HDSP_FIRMWARE_SIZE); --- a/sound/soc/codecs/wm2000.c +++ b/sound/soc/codecs/wm2000.c -@@ -834,10 +834,8 @@ static int wm2000_i2c_probe(struct i2c_c +@@ -886,10 +886,8 @@ static int wm2000_i2c_probe(struct i2c_c } ret = request_firmware(&fw, filename, &i2c->dev); diff --git a/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch b/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch index 4c66d96c1..a89b9fc10 100644 --- a/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch +++ b/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch @@ -19,7 +19,7 @@ removed in later patches. --- a/drivers/base/firmware_class.c +++ b/drivers/base/firmware_class.c -@@ -502,14 +502,23 @@ static ssize_t firmware_loading_store(st +@@ -604,14 +604,23 @@ static ssize_t firmware_loading_store(st * is completed. * */ fw_map_pages_buf(fw_buf); @@ -45,7 +45,7 @@ removed in later patches. fw_load_abort(fw_priv); break; } -@@ -679,6 +688,9 @@ static void firmware_class_timeout_work( +@@ -781,6 +790,9 @@ static void firmware_class_timeout_work( mutex_unlock(&fw_lock); return; } @@ -55,17 +55,7 @@ removed in later patches. fw_load_abort(fw_priv); mutex_unlock(&fw_lock); } -@@ -807,7 +819,8 @@ _request_firmware_prepare(const struct f - } - - if (fw_get_builtin_firmware(firmware, name)) { -- dev_dbg(device, "firmware: using built-in firmware %s\n", name); -+ dev_info(device, "firmware: using built-in firmware %s\n", -+ name); - return NULL; - } - -@@ -885,25 +898,28 @@ static int _request_firmware_load(struct +@@ -832,25 +844,28 @@ static int _request_firmware_load(struct retval = device_add(f_dev); if (retval) { @@ -98,39 +88,50 @@ removed in later patches. if (timeout != MAX_SCHEDULE_TIMEOUT) schedule_delayed_work(&fw_priv->timeout_work, timeout); -@@ -916,8 +932,15 @@ static int _request_firmware_load(struct +@@ -940,7 +955,8 @@ _request_firmware_prepare(struct firmwar + } + + if (fw_get_builtin_firmware(firmware, name)) { +- dev_dbg(device, "firmware: using built-in firmware %s\n", name); ++ dev_info(device, "firmware: using built-in firmware %s\n", ++ name); + return 0; /* assigned */ + } + +@@ -970,9 +986,16 @@ static int assign_firmware_buf(struct fi + struct firmware_buf *buf = fw->priv; - handle_fw: mutex_lock(&fw_lock); -- if (!buf->size || test_bit(FW_STATUS_ABORT, &buf->status)) -+ if (test_bit(FW_STATUS_ABORT, &buf->status)) { +- if (!buf->size || is_fw_load_aborted(buf)) { ++ if (is_fw_load_aborted(buf)) { + /* failure has already been logged */ - retval = -ENOENT; + mutex_unlock(&fw_lock); + return -ENOENT; + } else if (!buf->size) { + dev_err(f_dev->parent, + "firmware: agent loaded no data for %s (not found?)\n", + buf->fw_id); -+ retval = -ENOENT; -+ } ++ mutex_unlock(&fw_lock); ++ return -ENOENT; + } /* - * add firmware name into devres list so that we can auto cache -@@ -996,6 +1019,9 @@ request_firmware(const struct firmware * - } - if (ret) - _request_firmware_cleanup(firmware_p); -+ else +@@ -1021,7 +1044,7 @@ _request_firmware(const struct firmware + if (nowait) { + timeout = usermodehelper_read_lock_wait(timeout); + if (!timeout) { +- dev_dbg(device, "firmware: %s loading timed out\n", ++ dev_err(device, "firmware: %s loading timed out\n", + name); + ret = -EBUSY; + goto out; +@@ -1047,6 +1070,9 @@ _request_firmware(const struct firmware + if (ret < 0) { + release_firmware(fw); + fw = NULL; ++ } else { + dev_info(device, "firmware: agent loaded %s into memory\n", + name); - - return ret; - } -@@ -1045,7 +1071,7 @@ static void request_firmware_work_func(s - ret = _request_firmware_load(fw_priv, fw_work->uevent, timeout); - usermodehelper_read_unlock(); - } else { -- dev_dbg(fw_work->device, "firmware: %s loading timed out\n", -+ dev_err(fw_work->device, "firmware: %s loading timed out\n", - fw_work->name); - ret = -EAGAIN; } + + *firmware_p = fw; diff --git a/debian/patches/bugfix/all/kernel-signal.c-use-__ARCH_HAS_SA_RESTORER-instead-o.patch b/debian/patches/bugfix/all/kernel-signal.c-use-__ARCH_HAS_SA_RESTORER-instead-o.patch deleted file mode 100644 index 2a6c05fd9..000000000 --- a/debian/patches/bugfix/all/kernel-signal.c-use-__ARCH_HAS_SA_RESTORER-instead-o.patch +++ /dev/null @@ -1,36 +0,0 @@ -From: Andrew Morton -Date: Wed, 13 Mar 2013 14:59:34 -0700 -Subject: kernel/signal.c: use __ARCH_HAS_SA_RESTORER instead of SA_RESTORER - -commit 522cff142d7d2f9230839c9e1f21a4d8bcc22a4a upstream. - -__ARCH_HAS_SA_RESTORER is the preferred conditional for use in 3.9 and -later kernels, per Kees. - -Cc: Emese Revfy -Cc: Emese Revfy -Cc: PaX Team -Cc: Al Viro -Cc: Oleg Nesterov -Cc: "Eric W. Biederman" -Cc: Serge Hallyn -Cc: Julien Tinnes -Signed-off-by: Andrew Morton -Signed-off-by: Linus Torvalds ---- - kernel/signal.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/kernel/signal.c b/kernel/signal.c -index 43b0d4a..dd72567 100644 ---- a/kernel/signal.c -+++ b/kernel/signal.c -@@ -485,7 +485,7 @@ flush_signal_handlers(struct task_struct *t, int force_default) - if (force_default || ka->sa.sa_handler != SIG_IGN) - ka->sa.sa_handler = SIG_DFL; - ka->sa.sa_flags = 0; --#ifdef SA_RESTORER -+#ifdef __ARCH_HAS_SA_RESTORER - ka->sa.sa_restorer = NULL; - #endif - sigemptyset(&ka->sa.sa_mask); diff --git a/debian/patches/bugfix/all/signal-fix-use-of-missing-sa_restorer-field.patch b/debian/patches/bugfix/all/signal-fix-use-of-missing-sa_restorer-field.patch deleted file mode 100644 index 04c890554..000000000 --- a/debian/patches/bugfix/all/signal-fix-use-of-missing-sa_restorer-field.patch +++ /dev/null @@ -1,149 +0,0 @@ -From: Ben Hutchings -Date: Sun, 25 Nov 2012 22:24:19 -0500 -Subject: signal: Fix use of missing sa_restorer field - -flush_signal_handlers() needs to know whether sigaction::sa_restorer -is defined, not whether SA_RESTORER is defined. Define the -__ARCH_HAS_SA_RESTORER macro to indicate this. - -Vaguely based on upstream commit 574c4866e33d 'consolidate kernel-side -struct sigaction declarations'. - -Signed-off-by: Ben Hutchings -Cc: Al Viro ---- ---- a/arch/arm/include/asm/signal.h -+++ b/arch/arm/include/asm/signal.h -@@ -29,6 +29,7 @@ struct sigaction { - __sigrestore_t sa_restorer; - sigset_t sa_mask; /* mask last for extensibility */ - }; -+#define __ARCH_HAS_SA_RESTORER - - struct k_sigaction { - struct sigaction sa; ---- a/arch/avr32/include/asm/signal.h -+++ b/arch/avr32/include/asm/signal.h -@@ -29,6 +29,7 @@ struct sigaction { - __sigrestore_t sa_restorer; - sigset_t sa_mask; /* mask last for extensibility */ - }; -+#define __ARCH_HAS_SA_RESTORER - - struct k_sigaction { - struct sigaction sa; ---- a/arch/cris/include/asm/signal.h -+++ b/arch/cris/include/asm/signal.h -@@ -29,6 +29,7 @@ struct sigaction { - void (*sa_restorer)(void); - sigset_t sa_mask; /* mask last for extensibility */ - }; -+#define __ARCH_HAS_SA_RESTORER - - struct k_sigaction { - struct sigaction sa; ---- a/arch/h8300/include/asm/signal.h -+++ b/arch/h8300/include/asm/signal.h -@@ -29,6 +29,7 @@ struct sigaction { - void (*sa_restorer)(void); - sigset_t sa_mask; /* mask last for extensibility */ - }; -+#define __ARCH_HAS_SA_RESTORER - - struct k_sigaction { - struct sigaction sa; ---- a/arch/m32r/include/asm/signal.h -+++ b/arch/m32r/include/asm/signal.h -@@ -22,6 +22,7 @@ struct sigaction { - __sigrestore_t sa_restorer; - sigset_t sa_mask; /* mask last for extensibility */ - }; -+#define __ARCH_HAS_SA_RESTORER - - struct k_sigaction { - struct sigaction sa; ---- a/arch/m68k/include/asm/signal.h -+++ b/arch/m68k/include/asm/signal.h -@@ -29,6 +29,7 @@ struct sigaction { - __sigrestore_t sa_restorer; - sigset_t sa_mask; /* mask last for extensibility */ - }; -+#define __ARCH_HAS_SA_RESTORER - - struct k_sigaction { - struct sigaction sa; ---- a/arch/mn10300/include/asm/signal.h -+++ b/arch/mn10300/include/asm/signal.h -@@ -39,6 +39,7 @@ struct sigaction { - __sigrestore_t sa_restorer; - sigset_t sa_mask; /* mask last for extensibility */ - }; -+#define __ARCH_HAS_SA_RESTORER - - struct k_sigaction { - struct sigaction sa; ---- a/arch/powerpc/include/asm/signal.h -+++ b/arch/powerpc/include/asm/signal.h -@@ -1,6 +1,7 @@ - #ifndef _ASM_POWERPC_SIGNAL_H - #define _ASM_POWERPC_SIGNAL_H - -+#define __ARCH_HAS_SA_RESTORER - #include - - #endif /* _ASM_POWERPC_SIGNAL_H */ ---- a/arch/s390/include/asm/signal.h -+++ b/arch/s390/include/asm/signal.h -@@ -34,6 +34,7 @@ struct sigaction { - void (*sa_restorer)(void); - sigset_t sa_mask; /* mask last for extensibility */ - }; -+#define __ARCH_HAS_SA_RESTORER - - struct k_sigaction { - struct sigaction sa; ---- a/arch/sparc/include/asm/signal.h -+++ b/arch/sparc/include/asm/signal.h -@@ -26,5 +26,7 @@ struct k_sigaction { - void __user *ka_restorer; - }; - -+#define __ARCH_HAS_SA_RESTORER -+ - #endif /* !(__ASSEMBLY__) */ - #endif /* !(__SPARC_SIGNAL_H) */ ---- a/arch/x86/include/asm/signal.h -+++ b/arch/x86/include/asm/signal.h -@@ -31,6 +31,9 @@ typedef sigset_t compat_sigset_t; - #include - #ifndef __ASSEMBLY__ - extern void do_notify_resume(struct pt_regs *, void *, __u32); -+ -+#define __ARCH_HAS_SA_RESTORER -+ - #ifdef __i386__ - struct old_sigaction { - __sighandler_t sa_handler; ---- a/arch/xtensa/include/asm/signal.h -+++ b/arch/xtensa/include/asm/signal.h -@@ -21,6 +21,7 @@ struct sigaction { - void (*sa_restorer)(void); - sigset_t sa_mask; /* mask last for extensibility */ - }; -+#define __ARCH_HAS_SA_RESTORER - - struct k_sigaction { - struct sigaction sa; ---- a/include/uapi/asm-generic/signal.h -+++ b/include/uapi/asm-generic/signal.h -@@ -93,6 +93,10 @@ typedef unsigned long old_sigset_t; - - #include - -+#ifdef SA_RESTORER -+#define __ARCH_HAS_SA_RESTORER -+#endif -+ - struct sigaction { - __sighandler_t sa_handler; - unsigned long sa_flags; diff --git a/debian/patches/bugfix/alpha/alpha-use-large-data-model.diff b/debian/patches/bugfix/alpha/alpha-use-large-data-model.diff deleted file mode 100644 index eead40694..000000000 --- a/debian/patches/bugfix/alpha/alpha-use-large-data-model.diff +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/arch/alpha/Makefile b/arch/alpha/Makefile -index 4759fe7..b5d44bd 100644 ---- a/arch/alpha/Makefile -+++ b/arch/alpha/Makefile -@@ -12,7 +12,7 @@ NM := $(NM) -B - - LDFLAGS_vmlinux := -static -N #-relax - CHECKFLAGS += -D__alpha__ -m64 --cflags-y := -pipe -mno-fp-regs -ffixed-8 -msmall-data -+cflags-y := -pipe -mno-fp-regs -ffixed-8 -mlarge-data - cflags-y += $(call cc-option, -fno-jump-tables) - - cpuflags-$(CONFIG_ALPHA_EV4) := -mcpu=ev4 diff --git a/debian/patches/bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch b/debian/patches/bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch deleted file mode 100644 index 8593ea986..000000000 --- a/debian/patches/bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch +++ /dev/null @@ -1,63 +0,0 @@ -From: Ben Hutchings -Date: Wed, 20 Feb 2013 02:38:08 +0000 -Subject: [PATCH] nouveau: ACPI support depends on X86 and X86_PLATFORM_DEVICES -Forwarded: http://lists.freedesktop.org/archives/dri-devel/2013-February/035133.html - -If I build nouveau on ia64, Kconfig warns: - -warning: (DRM_NOUVEAU) selects ACPI_WMI which has unmet direct dependencies (X86 && X86_PLATFORM_DEVICES && ACPI) -warning: (DRM_NOUVEAU) selects MXM_WMI which has unmet direct dependencies (X86 && X86_PLATFORM_DEVICES && ACPI_WMI) - -Make all the ACPI support depend on X86 and select -X86_PLATFORM_DEVICES. - -Signed-off-by: Ben Hutchings ---- ---- a/drivers/gpu/drm/nouveau/Kconfig -+++ b/drivers/gpu/drm/nouveau/Kconfig -@@ -11,8 +11,9 @@ config DRM_NOUVEAU - select FRAMEBUFFER_CONSOLE if !EXPERT - select FB_BACKLIGHT if DRM_NOUVEAU_BACKLIGHT - select ACPI_VIDEO if ACPI && X86 && BACKLIGHT_CLASS_DEVICE && VIDEO_OUTPUT_CONTROL && INPUT -- select ACPI_WMI if ACPI -- select MXM_WMI if ACPI -+ select X86_PLATFORM_DEVICES if ACPI && X86 -+ select ACPI_WMI if ACPI && X86 -+ select MXM_WMI if ACPI && X86 - select POWER_SUPPLY - help - Choose this option for open-source nVidia support. ---- a/drivers/gpu/drm/nouveau/Makefile -+++ b/drivers/gpu/drm/nouveau/Makefile -@@ -216,7 +216,9 @@ nouveau-y += nouveau_mem.o - - # other random bits - nouveau-$(CONFIG_COMPAT) += nouveau_ioc32.o -+ifdef CONFIG_X86 - nouveau-$(CONFIG_ACPI) += nouveau_acpi.o -+endif - nouveau-$(CONFIG_DRM_NOUVEAU_BACKLIGHT) += nouveau_backlight.o - - obj-$(CONFIG_DRM_NOUVEAU)+= nouveau.o ---- a/drivers/gpu/drm/nouveau/nouveau_acpi.h -+++ b/drivers/gpu/drm/nouveau/nouveau_acpi.h -@@ -3,7 +3,7 @@ - - #define ROM_BIOS_PAGE 4096 - --#if defined(CONFIG_ACPI) -+#if defined(CONFIG_ACPI) && defined(CONFIG_X86) - bool nouveau_is_optimus(void); - bool nouveau_is_v1_dsm(void); - void nouveau_register_dsm_handler(void); ---- a/drivers/gpu/drm/nouveau/core/subdev/bios/base.c -+++ b/drivers/gpu/drm/nouveau/core/subdev/bios/base.c -@@ -172,7 +172,7 @@ out: - nv_wr32(bios, pcireg, access); - } - --#if defined(CONFIG_ACPI) -+#if defined(CONFIG_ACPI) && defined(CONFIG_X86) - int nouveau_acpi_get_bios_chunk(uint8_t *bios, int offset, int len); - bool nouveau_acpi_rom_supported(struct pci_dev *pdev); - #else diff --git a/debian/patches/bugfix/mips/mips-add-dependencies-for-have_arch_transparent_hugepage.patch b/debian/patches/bugfix/mips/mips-add-dependencies-for-have_arch_transparent_hugepage.patch deleted file mode 100644 index d0450dee2..000000000 --- a/debian/patches/bugfix/mips/mips-add-dependencies-for-have_arch_transparent_hugepage.patch +++ /dev/null @@ -1,24 +0,0 @@ -From: Ben Hutchings -Subject: MIPS: Add dependencies for HAVE_ARCH_TRANSPARENT_HUGEPAGE -Date: Mon, 04 Mar 2013 03:54:29 +0000 - -The MIPS implementation of transparent huge-pages (THP) is 64-bit only, -and of course also requires that the CPU supports huge-pages. - -Currently it's entirely possible to enable THP in other configurations, -which then fail to build due to pfn_pmd() not being defined. - -Signed-off-by: Ben Hutchings -Cc: David Daney ---- ---- a/arch/mips/Kconfig -+++ b/arch/mips/Kconfig -@@ -19,7 +19,7 @@ config MIPS - select HAVE_KRETPROBES - select HAVE_DEBUG_KMEMLEAK - select ARCH_BINFMT_ELF_RANDOMIZE_PIE -- select HAVE_ARCH_TRANSPARENT_HUGEPAGE -+ select HAVE_ARCH_TRANSPARENT_HUGEPAGE if CPU_SUPPORTS_HUGEPAGES && 64BIT - select RTC_LIB if !MACH_LOONGSON - select GENERIC_ATOMIC64 if !64BIT - select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE diff --git a/debian/patches/bugfix/x86/KVM-x86-Convert-MSR_KVM_SYSTEM_TIME-to-use-gfn_to_hv.patch b/debian/patches/bugfix/x86/KVM-x86-Convert-MSR_KVM_SYSTEM_TIME-to-use-gfn_to_hv.patch deleted file mode 100644 index cae9a784c..000000000 --- a/debian/patches/bugfix/x86/KVM-x86-Convert-MSR_KVM_SYSTEM_TIME-to-use-gfn_to_hv.patch +++ /dev/null @@ -1,161 +0,0 @@ -From: Andy Honig -Date: Wed, 20 Feb 2013 14:48:10 -0800 -Subject: KVM: x86: Convert MSR_KVM_SYSTEM_TIME to use gfn_to_hva_cache - functions (CVE-2013-1797) - -commit 0b79459b482e85cb7426aa7da683a9f2c97aeae1 upstream. - -There is a potential use after free issue with the handling of -MSR_KVM_SYSTEM_TIME. If the guest specifies a GPA in a movable or removable -memory such as frame buffers then KVM might continue to write to that -address even after it's removed via KVM_SET_USER_MEMORY_REGION. KVM pins -the page in memory so it's unlikely to cause an issue, but if the user -space component re-purposes the memory previously used for the guest, then -the guest will be able to corrupt that memory. - -Tested: Tested against kvmclock unit test - -Signed-off-by: Andrew Honig -Signed-off-by: Marcelo Tosatti ---- - arch/x86/include/asm/kvm_host.h | 4 ++-- - arch/x86/kvm/x86.c | 47 +++++++++++++++++---------------------- - 2 files changed, 22 insertions(+), 29 deletions(-) - -diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h -index 635a74d..4979778 100644 ---- a/arch/x86/include/asm/kvm_host.h -+++ b/arch/x86/include/asm/kvm_host.h -@@ -414,8 +414,8 @@ struct kvm_vcpu_arch { - gpa_t time; - struct pvclock_vcpu_time_info hv_clock; - unsigned int hw_tsc_khz; -- unsigned int time_offset; -- struct page *time_page; -+ struct gfn_to_hva_cache pv_time; -+ bool pv_time_enabled; - /* set guest stopped flag in pvclock flags field */ - bool pvclock_set_guest_stopped_request; - -diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c -index 2ade60c..f19ac0a 100644 ---- a/arch/x86/kvm/x86.c -+++ b/arch/x86/kvm/x86.c -@@ -1406,10 +1406,9 @@ static int kvm_guest_time_update(struct kvm_vcpu *v) - unsigned long flags, this_tsc_khz; - struct kvm_vcpu_arch *vcpu = &v->arch; - struct kvm_arch *ka = &v->kvm->arch; -- void *shared_kaddr; - s64 kernel_ns, max_kernel_ns; - u64 tsc_timestamp, host_tsc; -- struct pvclock_vcpu_time_info *guest_hv_clock; -+ struct pvclock_vcpu_time_info guest_hv_clock; - u8 pvclock_flags; - bool use_master_clock; - -@@ -1463,7 +1462,7 @@ static int kvm_guest_time_update(struct kvm_vcpu *v) - - local_irq_restore(flags); - -- if (!vcpu->time_page) -+ if (!vcpu->pv_time_enabled) - return 0; - - /* -@@ -1525,12 +1524,12 @@ static int kvm_guest_time_update(struct kvm_vcpu *v) - */ - vcpu->hv_clock.version += 2; - -- shared_kaddr = kmap_atomic(vcpu->time_page); -- -- guest_hv_clock = shared_kaddr + vcpu->time_offset; -+ if (unlikely(kvm_read_guest_cached(v->kvm, &vcpu->pv_time, -+ &guest_hv_clock, sizeof(guest_hv_clock)))) -+ return 0; - - /* retain PVCLOCK_GUEST_STOPPED if set in guest copy */ -- pvclock_flags = (guest_hv_clock->flags & PVCLOCK_GUEST_STOPPED); -+ pvclock_flags = (guest_hv_clock.flags & PVCLOCK_GUEST_STOPPED); - - if (vcpu->pvclock_set_guest_stopped_request) { - pvclock_flags |= PVCLOCK_GUEST_STOPPED; -@@ -1543,12 +1542,9 @@ static int kvm_guest_time_update(struct kvm_vcpu *v) - - vcpu->hv_clock.flags = pvclock_flags; - -- memcpy(shared_kaddr + vcpu->time_offset, &vcpu->hv_clock, -- sizeof(vcpu->hv_clock)); -- -- kunmap_atomic(shared_kaddr); -- -- mark_page_dirty(v->kvm, vcpu->time >> PAGE_SHIFT); -+ kvm_write_guest_cached(v->kvm, &vcpu->pv_time, -+ &vcpu->hv_clock, -+ sizeof(vcpu->hv_clock)); - return 0; - } - -@@ -1837,10 +1833,7 @@ static int kvm_pv_enable_async_pf(struct kvm_vcpu *vcpu, u64 data) - - static void kvmclock_reset(struct kvm_vcpu *vcpu) - { -- if (vcpu->arch.time_page) { -- kvm_release_page_dirty(vcpu->arch.time_page); -- vcpu->arch.time_page = NULL; -- } -+ vcpu->arch.pv_time_enabled = false; - } - - static void accumulate_steal_time(struct kvm_vcpu *vcpu) -@@ -1947,6 +1940,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) - break; - case MSR_KVM_SYSTEM_TIME_NEW: - case MSR_KVM_SYSTEM_TIME: { -+ u64 gpa_offset; - kvmclock_reset(vcpu); - - vcpu->arch.time = data; -@@ -1956,19 +1950,17 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) - if (!(data & 1)) - break; - -- /* ...but clean it before doing the actual write */ -- vcpu->arch.time_offset = data & ~(PAGE_MASK | 1); -+ gpa_offset = data & ~(PAGE_MASK | 1); - - /* Check that the address is 32-byte aligned. */ -- if (vcpu->arch.time_offset & -- (sizeof(struct pvclock_vcpu_time_info) - 1)) -+ if (gpa_offset & (sizeof(struct pvclock_vcpu_time_info) - 1)) - break; - -- vcpu->arch.time_page = -- gfn_to_page(vcpu->kvm, data >> PAGE_SHIFT); -- -- if (is_error_page(vcpu->arch.time_page)) -- vcpu->arch.time_page = NULL; -+ if (kvm_gfn_to_hva_cache_init(vcpu->kvm, -+ &vcpu->arch.pv_time, data & ~1ULL)) -+ vcpu->arch.pv_time_enabled = false; -+ else -+ vcpu->arch.pv_time_enabled = true; - - break; - } -@@ -2972,7 +2964,7 @@ static int kvm_vcpu_ioctl_x86_set_xcrs(struct kvm_vcpu *vcpu, - */ - static int kvm_set_guest_paused(struct kvm_vcpu *vcpu) - { -- if (!vcpu->arch.time_page) -+ if (!vcpu->arch.pv_time_enabled) - return -EINVAL; - vcpu->arch.pvclock_set_guest_stopped_request = true; - kvm_make_request(KVM_REQ_CLOCK_UPDATE, vcpu); -@@ -6723,6 +6715,7 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) - goto fail_free_wbinvd_dirty_mask; - - vcpu->arch.ia32_tsc_adjust_msr = 0x0; -+ vcpu->arch.pv_time_enabled = false; - kvm_async_pf_hash_reset(vcpu); - kvm_pmu_init(vcpu); - diff --git a/debian/patches/bugfix/x86/KVM-x86-fix-for-buffer-overflow-in-handling-of-MSR_K.patch b/debian/patches/bugfix/x86/KVM-x86-fix-for-buffer-overflow-in-handling-of-MSR_K.patch deleted file mode 100644 index 444989428..000000000 --- a/debian/patches/bugfix/x86/KVM-x86-fix-for-buffer-overflow-in-handling-of-MSR_K.patch +++ /dev/null @@ -1,39 +0,0 @@ -From: Andy Honig -Date: Mon, 11 Mar 2013 09:34:52 -0700 -Subject: KVM: x86: fix for buffer overflow in handling of MSR_KVM_SYSTEM_TIME - (CVE-2013-1796) - -commit c300aa64ddf57d9c5d9c898a64b36877345dd4a9 upstream. - -If the guest sets the GPA of the time_page so that the request to update the -time straddles a page then KVM will write onto an incorrect page. The -write is done byusing kmap atomic to get a pointer to the page for the time -structure and then performing a memcpy to that page starting at an offset -that the guest controls. Well behaved guests always provide a 32-byte aligned -address, however a malicious guest could use this to corrupt host kernel -memory. - -Tested: Tested against kvmclock unit test. - -Signed-off-by: Andrew Honig -Signed-off-by: Marcelo Tosatti ---- - arch/x86/kvm/x86.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c -index f7c850b..2ade60c 100644 ---- a/arch/x86/kvm/x86.c -+++ b/arch/x86/kvm/x86.c -@@ -1959,6 +1959,11 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) - /* ...but clean it before doing the actual write */ - vcpu->arch.time_offset = data & ~(PAGE_MASK | 1); - -+ /* Check that the address is 32-byte aligned. */ -+ if (vcpu->arch.time_offset & -+ (sizeof(struct pvclock_vcpu_time_info) - 1)) -+ break; -+ - vcpu->arch.time_page = - gfn_to_page(vcpu->kvm, data >> PAGE_SHIFT); - diff --git a/debian/patches/debian/dfsg/video-remove-nvidiafb-and-rivafb.patch b/debian/patches/debian/dfsg/video-remove-nvidiafb-and-rivafb.patch index b77ba7b9d..22bf69f4d 100644 --- a/debian/patches/debian/dfsg/video-remove-nvidiafb-and-rivafb.patch +++ b/debian/patches/debian/dfsg/video-remove-nvidiafb-and-rivafb.patch @@ -114,8 +114,8 @@ probably discontinued 10 years ago. - Say Y here if you want to control the backlight of your display. - config FB_I740 - tristate "Intel740 support (EXPERIMENTAL)" - depends on EXPERIMENTAL && FB && PCI + tristate "Intel740 support" + depends on FB && PCI --- a/drivers/video/Makefile +++ b/drivers/video/Makefile @@ -38,8 +38,6 @@ obj-$(CONFIG_FB_PM2) += pm2fb.o diff --git a/debian/patches/debian/efi-autoload-efivars.patch b/debian/patches/debian/efi-autoload-efivars.patch index 9c46182a3..c424d4c48 100644 --- a/debian/patches/debian/efi-autoload-efivars.patch +++ b/debian/patches/debian/efi-autoload-efivars.patch @@ -15,15 +15,15 @@ are available. This should trigger udev to load it. --- --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c -@@ -41,6 +41,7 @@ - #include +@@ -42,6 +42,7 @@ #include #include + #include +#include #include #include -@@ -762,6 +763,20 @@ void __init efi_late_init(void) +@@ -870,6 +871,20 @@ void __init efi_late_init(void) efi_bgrt_init(); } @@ -46,7 +46,7 @@ are available. This should trigger udev to load it. u64 addr, npages; --- a/drivers/firmware/efivars.c +++ b/drivers/firmware/efivars.c -@@ -94,6 +94,7 @@ MODULE_AUTHOR("Matt Domsch remaining_size || size > max_size || -- (remaining_size - size) < (storage_size / 2)) -+ if (!storage_size || size > remaining_size || size > max_size) - return EFI_OUT_OF_RESOURCES; +-static bool efi_no_storage_paranoia; ++static bool efi_no_storage_paranoia = true; - return status; + static int __init setup_storage_paranoia(char *arg) + { diff --git a/debian/patches/debian/radeon-firmware-is-required-for-drm-and-kms-on-r600-onward.patch b/debian/patches/debian/radeon-firmware-is-required-for-drm-and-kms-on-r600-onward.patch index db24cfeed..1a9858f5f 100644 --- a/debian/patches/debian/radeon-firmware-is-required-for-drm-and-kms-on-r600-onward.patch +++ b/debian/patches/debian/radeon-firmware-is-required-for-drm-and-kms-on-r600-onward.patch @@ -36,7 +36,7 @@ missing, except for the pre-R600 KMS case. /* -@@ -286,6 +288,35 @@ static struct drm_driver driver_old = { +@@ -301,6 +303,37 @@ static struct drm_driver driver_old = { static struct drm_driver kms_driver; @@ -58,6 +58,7 @@ missing, except for the pre-R600 KMS case. + return false; +} + ++#ifdef CONFIG_DRM_RADEON_UMS +static int +radeon_ums_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) +{ @@ -68,11 +69,12 @@ missing, except for the pre-R600 KMS case. + + return 0; +} ++#endif + static int radeon_kick_out_firmware_fb(struct pci_dev *pdev) { struct apertures_struct *ap; -@@ -312,6 +343,12 @@ static int radeon_pci_probe(struct pci_d +@@ -327,6 +360,12 @@ static int radeon_pci_probe(struct pci_d { int ret; @@ -85,11 +87,11 @@ missing, except for the pre-R600 KMS case. /* Get rid of things like offb */ ret = radeon_kick_out_firmware_fb(pdev); if (ret) -@@ -414,6 +451,7 @@ static struct pci_driver *pdriver; +@@ -435,6 +474,7 @@ static struct pci_driver *pdriver; static struct pci_driver radeon_pci_driver = { .name = DRIVER_NAME, .id_table = pciidlist, + .probe = radeon_ums_pci_probe, }; + #endif - static struct pci_driver radeon_kms_pci_driver = { diff --git a/debian/patches/features/all/alx/alx-add-new-QCA-ethernet-driver-which-supercedes-atl.patch b/debian/patches/features/all/alx/alx-add-new-QCA-ethernet-driver-which-supercedes-atl.patch index 940ba66b5..be8c132b1 100644 --- a/debian/patches/features/all/alx/alx-add-new-QCA-ethernet-driver-which-supercedes-atl.patch +++ b/debian/patches/features/all/alx/alx-add-new-QCA-ethernet-driver-which-supercedes-atl.patch @@ -80,7 +80,7 @@ Signed-off-by: Luis R. Rodriguez --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -1317,6 +1317,17 @@ W: http://atl1.sourceforge.net +@@ -1432,6 +1432,17 @@ W: http://atl1.sourceforge.net S: Maintained F: drivers/net/ethernet/atheros/ @@ -104,9 +104,9 @@ Signed-off-by: Luis R. Rodriguez will be called atl1e. config ATL1C -- tristate "Atheros L1C Gigabit Ethernet support (EXPERIMENTAL)" +- tristate "Atheros L1C Gigabit Ethernet support" + tristate "Atheros L1C Gigabit Ethernet support (DEPRECATED)" - depends on PCI && EXPERIMENTAL + depends on PCI select CRC32 select NET_CORE select MII diff --git a/debian/patches/features/all/alx/remove-atl1c-devices-from-alx.patch b/debian/patches/features/all/alx/remove-atl1c-devices-from-alx.patch index 9a6ca8f95..c1c2f7110 100644 --- a/debian/patches/features/all/alx/remove-atl1c-devices-from-alx.patch +++ b/debian/patches/features/all/alx/remove-atl1c-devices-from-alx.patch @@ -23,8 +23,8 @@ I've also changed the Kconfig help text to reflect this. config ATL1C - tristate "Atheros L1C Gigabit Ethernet support (DEPRECATED)" -+ tristate "Atheros L1C Gigabit Ethernet support (EXPERIMENTAL)" - depends on PCI && EXPERIMENTAL ++ tristate "Atheros L1C Gigabit Ethernet support" + depends on PCI select CRC32 select NET_CORE select MII diff --git a/debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch b/debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch index dda7ec8db..c04baf840 100644 --- a/debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch +++ b/debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch @@ -32,7 +32,7 @@ Signed-off-by: Ben Hutchings checkreqprot [SELINUX] Set initial checkreqprot flag value. --- a/init/Kconfig +++ b/init/Kconfig -@@ -849,6 +849,14 @@ config MEMCG +@@ -845,6 +845,14 @@ config MEMCG This config option also selects MM_OWNER config option, which could in turn add some fork/exit overhead. @@ -49,7 +49,7 @@ Signed-off-by: Ben Hutchings depends on MEMCG && SWAP --- a/kernel/cgroup.c +++ b/kernel/cgroup.c -@@ -5149,7 +5149,7 @@ static void cgroup_release_agent(struct +@@ -5193,7 +5193,7 @@ static void cgroup_release_agent(struct mutex_unlock(&cgroup_mutex); } @@ -58,7 +58,7 @@ Signed-off-by: Ben Hutchings { int i; char *token; -@@ -5169,17 +5169,29 @@ static int __init cgroup_disable(char *s +@@ -5213,17 +5213,29 @@ static int __init cgroup_disable(char *s continue; if (!strcmp(token, ss->name)) { @@ -93,7 +93,7 @@ Signed-off-by: Ben Hutchings */ --- a/mm/memcontrol.c +++ b/mm/memcontrol.c -@@ -6745,6 +6745,9 @@ static void mem_cgroup_move_task(struct +@@ -6789,6 +6789,9 @@ static void mem_cgroup_move_task(struct struct cgroup_subsys mem_cgroup_subsys = { .name = "memory", @@ -102,4 +102,4 @@ Signed-off-by: Ben Hutchings +#endif .subsys_id = mem_cgroup_subsys_id, .css_alloc = mem_cgroup_css_alloc, - .css_offline = mem_cgroup_css_offline, + .css_online = mem_cgroup_css_online, diff --git a/debian/patches/features/all/xen/microcode.patch b/debian/patches/features/all/xen/microcode.patch index be5976ac3..f6003aae0 100644 --- a/debian/patches/features/all/xen/microcode.patch +++ b/debian/patches/features/all/xen/microcode.patch @@ -27,8 +27,8 @@ Takes from git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git#upstream --- a/arch/x86/include/asm/microcode.h +++ b/arch/x86/include/asm/microcode.h -@@ -63,4 +63,13 @@ static inline struct microcode_ops * __i - static inline void __exit exit_amd_microcode(void) {} +@@ -71,4 +71,13 @@ static inline int __init save_microcode_ + } #endif +#ifdef CONFIG_MICROCODE_XEN @@ -43,7 +43,7 @@ Takes from git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git#upstream #endif /* _ASM_X86_MICROCODE_H */ --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile -@@ -92,6 +92,7 @@ obj-$(CONFIG_PCSPKR_PLATFORM) += pcspeak +@@ -93,6 +93,7 @@ obj-$(CONFIG_MICROCODE_INTEL_LIB) += mic microcode-y := microcode_core.o microcode-$(CONFIG_MICROCODE_INTEL) += microcode_intel.o microcode-$(CONFIG_MICROCODE_AMD) += microcode_amd.o @@ -61,7 +61,7 @@ Takes from git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git#upstream #include #include #include -@@ -544,7 +545,9 @@ static int __init microcode_init(void) +@@ -546,7 +547,9 @@ static int __init microcode_init(void) struct cpuinfo_x86 *c = &cpu_data(0); int error; @@ -275,7 +275,7 @@ Takes from git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git#upstream +} --- a/arch/x86/xen/Kconfig +++ b/arch/x86/xen/Kconfig -@@ -50,3 +50,6 @@ config XEN_DEBUG_FS +@@ -51,3 +51,6 @@ config XEN_DEBUG_FS Enable statistics output and various tuning options in debugfs. Enabling this option may incur a significant performance overhead. diff --git a/debian/patches/series b/debian/patches/series index 226c2605b..e7df6f19c 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -42,7 +42,6 @@ debian/x86-memtest-WARN-if-bad-RAM-found.patch features/all/cpu-devices/Partially-revert-cpufreq-Add-support-for-x86-cpuinfo.patch -bugfix/alpha/alpha-use-large-data-model.diff debian/iwlwifi-do-not-request-unreleased-firmware.patch debian/cirrus-disable-modeset-by-default.patch debian/fs-enable-link-security-restrictions-by-default.patch @@ -68,7 +67,6 @@ features/all/alx/alx-add-new-QCA-ethernet-driver-which-supercedes-atl.patch features/all/alx/remove-atl1c-devices-from-alx.patch features/all/alx/mark-as-staging.patch -bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch debian/radeon-firmware-is-required-for-drm-and-kms-on-r600-onward.patch bugfix/x86/drm-i915-add-quirk-to-invert-brightness-on-emachines-g725.patch bugfix/x86/drm-i915-add-quirk-to-invert-brightness-on-emachines-e725.patch @@ -76,15 +74,6 @@ bugfix/x86/drm-i915-add-quirk-to-invert-brightness-on-packard-bell-ncl20.patch bugfix/all/mm-Try-harder-to-allocate-vmemmap-blocks.patch features/all/alx/alx-update-for-3.8.patch -bugfix/mips/mips-add-dependencies-for-have_arch_transparent_hugepage.patch -bugfix/all/signal-fix-use-of-missing-sa_restorer-field.patch -bugfix/all/kernel-signal.c-use-__ARCH_HAS_SA_RESTORER-instead-o.patch debian/efi-autoload-efivars.patch -bugfix/all/efi_pstore-Introducing-workqueue-updating-sysfs.patch -bugfix/all/efivars-explicitly-calculate-length-of-VariableName.patch -bugfix/all/efivars-Handle-duplicate-names-from-get_next_variabl.patch debian/efivars-remove-check-for-50-full-on-write.patch -bugfix/x86/KVM-x86-fix-for-buffer-overflow-in-handling-of-MSR_K.patch -bugfix/x86/KVM-x86-Convert-MSR_KVM_SYSTEM_TIME-to-use-gfn_to_hv.patch -bugfix/all/KVM-Fix-bounds-checking-in-ioapic-indirect-register-.patch debian/cdc_ncm-cdc_mbim-use-ncm-by-default.patch