Linux v3.3-4074-g5375871
This commit is contained in:
parent
70f8133b71
commit
7bd4dec471
@ -1,98 +0,0 @@
|
||||
Making an hfsplus partition bootable requires the ability to "bless" a
|
||||
file by putting its inode number in the volume header. Doing this from
|
||||
userspace on a mounted filesystem is impractical since the kernel will
|
||||
write back the original values on unmount. Add an ioctl to allow userspace
|
||||
to update the volume header information based on the target file.
|
||||
|
||||
Signed-off-by: Matthew Garrett <mjg@redhat.com>
|
||||
---
|
||||
Kept the ioctl in the hfs code, but moved it to a different range to reduce
|
||||
reduce the chances of someone stepping on it with another filesystem.
|
||||
Documentation/ioctl/ioctl-number.txt | 1 +
|
||||
fs/hfsplus/hfsplus_fs.h | 5 +++++
|
||||
fs/hfsplus/ioctl.c | 34 ++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 40 insertions(+), 0 deletions(-)
|
||||
diff --git a/Documentation/ioctl/ioctl-number.txt b/Documentation/ioctl/ioctl-number.txt
|
||||
index 4840334..37a4248 100644
|
||||
--- a/Documentation/ioctl/ioctl-number.txt
|
||||
+++ b/Documentation/ioctl/ioctl-number.txt
|
||||
@@ -218,6 +218,7 @@ Code Seq#(hex) Include File Comments
|
||||
'h' 00-7F conflict! Charon filesystem
|
||||
<mailto:zapman@interlan.net>
|
||||
'h' 00-1F linux/hpet.h conflict!
|
||||
+'h' 80-8F fs/hfsplus/ioctl.c
|
||||
'i' 00-3F linux/i2o-dev.h conflict!
|
||||
'i' 0B-1F linux/ipmi.h conflict!
|
||||
'i' 80-8F linux/i8k.h
|
||||
diff --git a/fs/hfsplus/hfsplus_fs.h b/fs/hfsplus/hfsplus_fs.h
|
||||
index 21a5b7f..4e75ac6 100644
|
||||
--- a/fs/hfsplus/hfsplus_fs.h
|
||||
+++ b/fs/hfsplus/hfsplus_fs.h
|
||||
@@ -317,6 +317,11 @@ static inline unsigned short hfsplus_min_io_size(struct super_block *sb)
|
||||
|
||||
|
||||
/*
|
||||
+ * hfs+-specific ioctl for making the filesystem bootable
|
||||
+ */
|
||||
+#define HFSPLUS_IOC_BLESS _IO('h', 0x80)
|
||||
+
|
||||
+/*
|
||||
* Functions in any *.c used in other files
|
||||
*/
|
||||
|
||||
diff --git a/fs/hfsplus/ioctl.c b/fs/hfsplus/ioctl.c
|
||||
index f66c765..c640ba5 100644
|
||||
--- a/fs/hfsplus/ioctl.c
|
||||
+++ b/fs/hfsplus/ioctl.c
|
||||
@@ -20,6 +20,38 @@
|
||||
#include <asm/uaccess.h>
|
||||
#include "hfsplus_fs.h"
|
||||
|
||||
+/*
|
||||
+ * "Blessing" an HFS+ filesystem writes metadata to the superblock informing
|
||||
+ * the platform firmware which file to boot from
|
||||
+ */
|
||||
+static int hfsplus_ioctl_bless(struct file *file, int __user *user_flags)
|
||||
+{
|
||||
+ struct dentry *dentry = file->f_path.dentry;
|
||||
+ struct inode *inode = dentry->d_inode;
|
||||
+ struct hfsplus_sb_info *sbi = HFSPLUS_SB(inode->i_sb);
|
||||
+ struct hfsplus_vh *vh = sbi->s_vhdr;
|
||||
+ struct hfsplus_vh *bvh = sbi->s_backup_vhdr;
|
||||
+
|
||||
+ if (!capable(CAP_SYS_ADMIN))
|
||||
+ return -EPERM;
|
||||
+
|
||||
+ mutex_lock(&sbi->vh_mutex);
|
||||
+
|
||||
+ /* Directory containing the bootable system */
|
||||
+ vh->finder_info[0] = bvh->finder_info[0] =
|
||||
+ cpu_to_be32(parent_ino(dentry));
|
||||
+
|
||||
+ /* Bootloader */
|
||||
+ vh->finder_info[1] = bvh->finder_info[1] = cpu_to_be32(inode->i_ino);
|
||||
+
|
||||
+ /* Per spec, the OS X system folder - same as finder_info[0] here */
|
||||
+ vh->finder_info[5] = bvh->finder_info[5] =
|
||||
+ cpu_to_be32(parent_ino(dentry));
|
||||
+
|
||||
+ mutex_unlock(&sbi->vh_mutex);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int hfsplus_ioctl_getflags(struct file *file, int __user *user_flags)
|
||||
{
|
||||
struct inode *inode = file->f_path.dentry->d_inode;
|
||||
@@ -108,6 +140,8 @@ long hfsplus_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
return hfsplus_ioctl_getflags(file, argp);
|
||||
case HFSPLUS_IOC_EXT2_SETFLAGS:
|
||||
return hfsplus_ioctl_setflags(file, argp);
|
||||
+ case HFSPLUS_IOC_BLESS:
|
||||
+ return hfsplus_ioctl_bless(file, argp);
|
||||
default:
|
||||
return -ENOTTY;
|
||||
}
|
||||
--
|
||||
1.7.7.6
|
||||
|
||||
|
@ -1,26 +0,0 @@
|
||||
The finder_info block in the hfsplus volume header is currently defined as
|
||||
an array of 8 bit values, but TN1150 defines it as being an array of 32 bit
|
||||
values. Fix for convenience.
|
||||
|
||||
Signed-off-by: Matthew Garrett <mjg@redhat.com>
|
||||
---
|
||||
fs/hfsplus/hfsplus_raw.h | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/fs/hfsplus/hfsplus_raw.h b/fs/hfsplus/hfsplus_raw.h
|
||||
index 927cdd6..921967e 100644
|
||||
--- a/fs/hfsplus/hfsplus_raw.h
|
||||
+++ b/fs/hfsplus/hfsplus_raw.h
|
||||
@@ -117,7 +117,7 @@ struct hfsplus_vh {
|
||||
__be32 write_count;
|
||||
__be64 encodings_bmp;
|
||||
|
||||
- u8 finder_info[32];
|
||||
+ u32 finder_info[8];
|
||||
|
||||
struct hfsplus_fork_raw alloc_file;
|
||||
struct hfsplus_fork_raw ext_file;
|
||||
--
|
||||
1.7.7.1
|
||||
|
||||
|
60
kernel.spec
60
kernel.spec
@ -6,7 +6,7 @@ Summary: The Linux kernel
|
||||
# For a stable, released kernel, released_kernel should be 1. For rawhide
|
||||
# and/or a kernel built from an rc or git snapshot, released_kernel should
|
||||
# be 0.
|
||||
%global released_kernel 1
|
||||
%global released_kernel 0
|
||||
|
||||
# Sign modules on x86. Make sure the config files match this setting if more
|
||||
# architectures are added.
|
||||
@ -62,7 +62,7 @@ Summary: The Linux kernel
|
||||
# For non-released -rc kernels, this will be appended after the rcX and
|
||||
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
|
||||
#
|
||||
%global baserelease 5
|
||||
%global baserelease 1
|
||||
%global fedora_build %{baserelease}
|
||||
|
||||
# base_sublevel is the kernel version we're starting with and patching
|
||||
@ -93,9 +93,9 @@ Summary: The Linux kernel
|
||||
# The next upstream release sublevel (base_sublevel+1)
|
||||
%define upstream_sublevel %(echo $((%{base_sublevel} + 1)))
|
||||
# The rc snapshot level
|
||||
%define rcrev 7
|
||||
%define rcrev 0
|
||||
# The git snapshot level
|
||||
%define gitrev 2
|
||||
%define gitrev 1
|
||||
# Set rpm version accordingly
|
||||
%define rpmversion 3.%{upstream_sublevel}.0
|
||||
%endif
|
||||
@ -609,7 +609,7 @@ Source2001: cpupower.config
|
||||
Patch00: %{stable_patch_00}
|
||||
%endif
|
||||
%if 0%{?stable_rc}
|
||||
%define stable_patch_01 patch-3.%{base_sublevel}.%{stable_update}-rc%{stable_rc}.bz2
|
||||
%define stable_patch_01 patch-3.%{base_sublevel}.%{stable_update}-rc%{stable_rc}.xz
|
||||
Patch01: %{stable_patch_01}
|
||||
%endif
|
||||
|
||||
@ -625,7 +625,7 @@ Patch01: patch-3.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.xz
|
||||
%else
|
||||
# pre-{base_sublevel+1}-rc1 case
|
||||
%if 0%{?gitrev}
|
||||
Patch00: patch-3.%{base_sublevel}-git%{gitrev}.bz2
|
||||
Patch00: patch-3.%{base_sublevel}-git%{gitrev}.xz
|
||||
%endif
|
||||
%endif
|
||||
%endif
|
||||
@ -708,7 +708,6 @@ Patch2901: linux-2.6-v4l-dvb-experimental.patch
|
||||
Patch4000: ext4-fix-resize-when-resizing-within-single-group.patch
|
||||
|
||||
# NFSv4
|
||||
Patch1101: linux-3.1-keys-remove-special-keyring.patch
|
||||
Patch1102: linux-3.3-newidmapper-01.patch
|
||||
Patch1103: linux-3.3-newidmapper-02.patch
|
||||
Patch1104: linux-3.3-newidmapper-03.patch
|
||||
@ -724,8 +723,6 @@ Patch14000: hibernate-freeze-filesystems.patch
|
||||
|
||||
Patch14010: lis3-improve-handling-of-null-rate.patch
|
||||
|
||||
Patch20000: utrace.patch
|
||||
|
||||
# Flattened devicetree support
|
||||
Patch21000: arm-omap-dt-compat.patch
|
||||
Patch21001: arm-smsc-support-reading-mac-address-from-device-tree.patch
|
||||
@ -739,13 +736,8 @@ Patch21070: ext4-Support-check-none-nocheck-mount-options.patch
|
||||
|
||||
Patch21092: udlfb-remove-sysfs-framebuffer-device-with-USB-disconnect.patch
|
||||
|
||||
Patch21093: rt2x00_fix_MCU_request_failures.patch
|
||||
|
||||
Patch21094: power-x86-destdir.patch
|
||||
|
||||
Patch21095: hfsplus-Change-finder_info-to-u32.patch
|
||||
Patch21096: hfsplus-Add-an-ioctl-to-bless-files.patch
|
||||
|
||||
#rhbz 788260
|
||||
Patch21233: jbd2-clear-BH_Delay-and-BH_Unwritten-in-journal_unmap_buf.patch
|
||||
|
||||
@ -755,9 +747,6 @@ Patch21235: scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
|
||||
Patch21250: mcelog-rcu-splat.patch
|
||||
Patch21260: x86-Avoid-invoking-RCU-when-CPU-is-idle.patch
|
||||
|
||||
#rhbz 795544
|
||||
Patch21280: ums_realtek-do-not-use-stack-memory-for-DMA-in-__do_.patch
|
||||
|
||||
#rhbz 727865 730007
|
||||
Patch21300: ACPICA-Fix-regression-in-FADT-revision-checks.patch
|
||||
|
||||
@ -1182,11 +1171,13 @@ if [ -d kernel-%{kversion}%{?dist} ]; then
|
||||
cd kernel-%{kversion}%{?dist}
|
||||
for i in linux-*
|
||||
do
|
||||
# Just in case we ctrl-c'd a prep already
|
||||
rm -rf deleteme.%{_target_cpu}
|
||||
# Move away the stale away, and delete in background.
|
||||
mv $i deleteme-$i
|
||||
rm -rf deleteme* &
|
||||
if [ -d $i ]; then
|
||||
# Just in case we ctrl-c'd a prep already
|
||||
rm -rf deleteme.%{_target_cpu}
|
||||
# Move away the stale away, and delete in background.
|
||||
mv $i deleteme-$i
|
||||
rm -rf deleteme* &
|
||||
fi
|
||||
done
|
||||
cd ..
|
||||
fi
|
||||
@ -1250,7 +1241,7 @@ if [ ! -d kernel-%{kversion}%{?dist}/vanilla-%{vanillaversion} ]; then
|
||||
%else
|
||||
# pre-{base_sublevel+1}-rc1 case
|
||||
%if 0%{?gitrev}
|
||||
ApplyPatch patch-3.%{base_sublevel}-git%{gitrev}.bz2
|
||||
ApplyPatch patch-3.%{base_sublevel}-git%{gitrev}.xz
|
||||
%endif
|
||||
%endif
|
||||
|
||||
@ -1332,8 +1323,8 @@ ApplyPatch linux-2.6-i386-nx-emulation.patch
|
||||
#
|
||||
# ARM
|
||||
#
|
||||
#pplyPatch arm-omap-dt-compat.patch
|
||||
ApplyPatch arm-smsc-support-reading-mac-address-from-device-tree.patch
|
||||
#ApplyPatch arm-omap-dt-compat.patch
|
||||
#ApplyPatch arm-smsc-support-reading-mac-address-from-device-tree.patch
|
||||
ApplyPatch arm-tegra-nvec-kconfig.patch
|
||||
|
||||
#
|
||||
@ -1351,7 +1342,6 @@ ApplyPatch ext4-fix-resize-when-resizing-within-single-group.patch
|
||||
# eCryptfs
|
||||
|
||||
# NFSv4
|
||||
ApplyPatch linux-3.1-keys-remove-special-keyring.patch
|
||||
ApplyPatch linux-3.3-newidmapper-01.patch
|
||||
ApplyPatch linux-3.3-newidmapper-02.patch
|
||||
ApplyPatch linux-3.3-newidmapper-03.patch
|
||||
@ -1448,25 +1438,17 @@ ApplyPatch dmar-disable-when-ricoh-multifunction.patch
|
||||
|
||||
ApplyPatch efi-dont-map-boot-services-on-32bit.patch
|
||||
|
||||
ApplyPatch hibernate-freeze-filesystems.patch
|
||||
# FIXME: REBASE
|
||||
#ApplyPatch hibernate-freeze-filesystems.patch
|
||||
|
||||
ApplyPatch lis3-improve-handling-of-null-rate.patch
|
||||
|
||||
# utrace.
|
||||
ApplyPatch utrace.patch
|
||||
|
||||
ApplyPatch ext4-Support-check-none-nocheck-mount-options.patch
|
||||
|
||||
ApplyPatch udlfb-remove-sysfs-framebuffer-device-with-USB-disconnect.patch
|
||||
|
||||
#rhbz 772772
|
||||
ApplyPatch rt2x00_fix_MCU_request_failures.patch
|
||||
|
||||
ApplyPatch power-x86-destdir.patch
|
||||
|
||||
ApplyPatch hfsplus-Change-finder_info-to-u32.patch
|
||||
ApplyPatch hfsplus-Add-an-ioctl-to-bless-files.patch
|
||||
|
||||
#rhbz 788269
|
||||
ApplyPatch jbd2-clear-BH_Delay-and-BH_Unwritten-in-journal_unmap_buf.patch
|
||||
|
||||
@ -1475,9 +1457,6 @@ ApplyPatch scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
|
||||
|
||||
ApplyPatch mcelog-rcu-splat.patch
|
||||
|
||||
#rhbz 795544
|
||||
ApplyPatch ums_realtek-do-not-use-stack-memory-for-DMA-in-__do_.patch
|
||||
|
||||
#rhbz 727865 730007
|
||||
ApplyPatch ACPICA-Fix-regression-in-FADT-revision-checks.patch
|
||||
|
||||
@ -2353,6 +2332,9 @@ fi
|
||||
# ||----w |
|
||||
# || ||
|
||||
%changelog
|
||||
* Thu Mar 22 2012 Dave Jones <davej@redhat.com> 3.4.0-0.rc0.git1.1
|
||||
- Linux v3.3-4074-g5375871
|
||||
|
||||
* Wed Mar 21 2012 Josh Boyer <jwboyer@redhat.com>
|
||||
- Ship hmac file for vmlinuz for FIPS-140 (rhbz 805538)
|
||||
|
||||
|
@ -476,10 +476,10 @@ index 12eb07b..c48ed49 100644
|
||||
.load_idt = xen_load_idt,
|
||||
.load_tls = xen_load_tls,
|
||||
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
|
||||
index bcb884e..94e82fa 100644
|
||||
index 81878b7..2536ec3 100644
|
||||
--- a/fs/binfmt_elf.c
|
||||
+++ b/fs/binfmt_elf.c
|
||||
@@ -711,6 +711,15 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
||||
@@ -711,6 +711,16 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
||||
if (retval)
|
||||
goto out_free_dentry;
|
||||
|
||||
@ -491,10 +491,11 @@ index bcb884e..94e82fa 100644
|
||||
+ if (disable_nx || executable_stack != EXSTACK_DISABLE_X || (__supported_pte_mask & _PAGE_NX))
|
||||
+ arch_add_exec_range(current->mm, -1);
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
/* OK, This is the point of no return */
|
||||
current->flags &= ~PF_FORKNOEXEC;
|
||||
current->mm->def_flags = def_flags;
|
||||
|
||||
diff --git a/include/linux/sched.h b/include/linux/sched.h
|
||||
index 7d379a6..90ccb05 100644
|
||||
--- a/include/linux/sched.h
|
||||
@ -576,10 +577,10 @@ index 3f758c7..0e29e1b 100644
|
||||
err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
|
||||
|
||||
/* Success. */
|
||||
@@ -2243,6 +2265,7 @@ void exit_mmap(struct mm_struct *mm)
|
||||
@@ -2266,6 +2266,7 @@ void exit_mmap(struct mm_struct *mm)
|
||||
|
||||
free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, 0);
|
||||
tlb_finish_mmu(&tlb, 0, end);
|
||||
tlb_finish_mmu(&tlb, 0, -1);
|
||||
+ arch_flush_exec_range(mm);
|
||||
|
||||
/*
|
||||
|
@ -1,110 +0,0 @@
|
||||
diff -up linux-3.1.x86_64/Documentation/networking/dns_resolver.txt.orig linux-3.1.x86_64/Documentation/networking/dns_resolver.txt
|
||||
--- linux-3.1.x86_64/Documentation/networking/dns_resolver.txt.orig 2011-10-24 03:10:05.000000000 -0400
|
||||
+++ linux-3.1.x86_64/Documentation/networking/dns_resolver.txt 2011-12-13 15:09:35.705766078 -0500
|
||||
@@ -102,6 +102,10 @@ implemented in the module can be called
|
||||
If _expiry is non-NULL, the expiry time (TTL) of the result will be
|
||||
returned also.
|
||||
|
||||
+The kernel maintains an internal keyring in which it caches looked up keys.
|
||||
+This can be cleared by any process that has the CAP_SYS_ADMIN capability by
|
||||
+the use of KEYCTL_KEYRING_CLEAR on the keyring ID.
|
||||
+
|
||||
|
||||
===============================
|
||||
READING DNS KEYS FROM USERSPACE
|
||||
diff -up linux-3.1.x86_64/Documentation/security/keys.txt.orig linux-3.1.x86_64/Documentation/security/keys.txt
|
||||
--- linux-3.1.x86_64/Documentation/security/keys.txt.orig 2011-10-24 03:10:05.000000000 -0400
|
||||
+++ linux-3.1.x86_64/Documentation/security/keys.txt 2011-12-13 15:09:35.706766099 -0500
|
||||
@@ -554,6 +554,10 @@ The keyctl syscall functions are:
|
||||
process must have write permission on the keyring, and it must be a
|
||||
keyring (or else error ENOTDIR will result).
|
||||
|
||||
+ This function can also be used to clear special kernel keyrings if they
|
||||
+ are appropriately marked if the user has CAP_SYS_ADMIN capability. The
|
||||
+ DNS resolver cache keyring is an example of this.
|
||||
+
|
||||
|
||||
(*) Link a key into a keyring:
|
||||
|
||||
diff -up linux-3.1.x86_64/fs/cifs/cifsacl.c.orig linux-3.1.x86_64/fs/cifs/cifsacl.c
|
||||
--- linux-3.1.x86_64/fs/cifs/cifsacl.c.orig 2011-12-13 12:54:12.221145867 -0500
|
||||
+++ linux-3.1.x86_64/fs/cifs/cifsacl.c 2011-12-13 15:09:35.707766122 -0500
|
||||
@@ -556,6 +556,7 @@ init_cifs_idmap(void)
|
||||
|
||||
/* instruct request_key() to use this special keyring as a cache for
|
||||
* the results it looks up */
|
||||
+ set_bit(KEY_FLAG_ROOT_CAN_CLEAR, &keyring->flags);
|
||||
cred->thread_keyring = keyring;
|
||||
cred->jit_keyring = KEY_REQKEY_DEFL_THREAD_KEYRING;
|
||||
root_cred = cred;
|
||||
diff -up linux-3.1.x86_64/fs/nfs/idmap.c.orig linux-3.1.x86_64/fs/nfs/idmap.c
|
||||
--- linux-3.1.x86_64/fs/nfs/idmap.c.orig 2011-12-13 12:54:14.657203507 -0500
|
||||
+++ linux-3.1.x86_64/fs/nfs/idmap.c 2011-12-13 15:10:14.731681691 -0500
|
||||
@@ -115,6 +115,7 @@ int nfs_idmap_init(void)
|
||||
if (ret < 0)
|
||||
goto failed_put_key;
|
||||
|
||||
+ set_bit(KEY_FLAG_ROOT_CAN_CLEAR, &keyring->flags);
|
||||
cred->thread_keyring = keyring;
|
||||
cred->jit_keyring = KEY_REQKEY_DEFL_THREAD_KEYRING;
|
||||
id_resolver_cache = cred;
|
||||
@@ -185,7 +186,7 @@ static ssize_t nfs_idmap_request_key(con
|
||||
}
|
||||
|
||||
rcu_read_lock();
|
||||
- rkey->perm |= KEY_USR_VIEW;
|
||||
+ rkey->perm |= KEY_USR_VIEW|KEY_USR_WRITE;
|
||||
|
||||
ret = key_validate(rkey);
|
||||
if (ret < 0)
|
||||
diff -up linux-3.1.x86_64/include/linux/key.h.orig linux-3.1.x86_64/include/linux/key.h
|
||||
--- linux-3.1.x86_64/include/linux/key.h.orig 2011-10-24 03:10:05.000000000 -0400
|
||||
+++ linux-3.1.x86_64/include/linux/key.h 2011-12-13 15:09:35.748767078 -0500
|
||||
@@ -155,6 +155,7 @@ struct key {
|
||||
#define KEY_FLAG_IN_QUOTA 3 /* set if key consumes quota */
|
||||
#define KEY_FLAG_USER_CONSTRUCT 4 /* set if key is being constructed in userspace */
|
||||
#define KEY_FLAG_NEGATIVE 5 /* set if key is negative */
|
||||
+#define KEY_FLAG_ROOT_CAN_CLEAR 6 /* set if key can be cleared by root without permission */
|
||||
|
||||
/* the description string
|
||||
* - this is used to match a key against search criteria
|
||||
diff -up linux-3.1.x86_64/net/dns_resolver/dns_key.c.orig linux-3.1.x86_64/net/dns_resolver/dns_key.c
|
||||
--- linux-3.1.x86_64/net/dns_resolver/dns_key.c.orig 2011-10-24 03:10:05.000000000 -0400
|
||||
+++ linux-3.1.x86_64/net/dns_resolver/dns_key.c 2011-12-13 15:09:35.748767078 -0500
|
||||
@@ -281,6 +281,7 @@ static int __init init_dns_resolver(void
|
||||
|
||||
/* instruct request_key() to use this special keyring as a cache for
|
||||
* the results it looks up */
|
||||
+ set_bit(KEY_FLAG_ROOT_CAN_CLEAR, &keyring->flags);
|
||||
cred->thread_keyring = keyring;
|
||||
cred->jit_keyring = KEY_REQKEY_DEFL_THREAD_KEYRING;
|
||||
dns_resolver_cache = cred;
|
||||
diff -up linux-3.1.x86_64/security/keys/keyctl.c.orig linux-3.1.x86_64/security/keys/keyctl.c
|
||||
--- linux-3.1.x86_64/security/keys/keyctl.c.orig 2011-12-13 12:54:30.322571289 -0500
|
||||
+++ linux-3.1.x86_64/security/keys/keyctl.c 2011-12-13 15:09:35.756767271 -0500
|
||||
@@ -388,11 +388,24 @@ long keyctl_keyring_clear(key_serial_t r
|
||||
keyring_ref = lookup_user_key(ringid, KEY_LOOKUP_CREATE, KEY_WRITE);
|
||||
if (IS_ERR(keyring_ref)) {
|
||||
ret = PTR_ERR(keyring_ref);
|
||||
+
|
||||
+ /* Root is permitted to invalidate certain special keyrings */
|
||||
+ if (capable(CAP_SYS_ADMIN)) {
|
||||
+ keyring_ref = lookup_user_key(ringid, 0, 0);
|
||||
+ if (IS_ERR(keyring_ref))
|
||||
+ goto error;
|
||||
+ if (test_bit(KEY_FLAG_ROOT_CAN_CLEAR,
|
||||
+ &key_ref_to_ptr(keyring_ref)->flags))
|
||||
+ goto clear;
|
||||
+ goto error_put;
|
||||
+ }
|
||||
+
|
||||
goto error;
|
||||
}
|
||||
|
||||
+clear:
|
||||
ret = keyring_clear(key_ref_to_ptr(keyring_ref));
|
||||
-
|
||||
+error_put:
|
||||
key_ref_put(keyring_ref);
|
||||
error:
|
||||
return ret;
|
@ -113,7 +113,7 @@ index 16570aa..827ebaf 100644
|
||||
|
||||
source "drivers/scsi/pcmcia/Kconfig"
|
||||
diff --git a/drivers/scsi/Makefile b/drivers/scsi/Makefile
|
||||
index 2b88749..351b28b 100644
|
||||
index e4c1a69..ad24e06 100644
|
||||
--- a/drivers/scsi/Makefile
|
||||
+++ b/drivers/scsi/Makefile
|
||||
@@ -141,6 +141,7 @@ obj-$(CONFIG_SCSI_CXGB4_ISCSI) += libiscsi.o libiscsi_tcp.o cxgbi/
|
||||
@ -122,8 +122,8 @@ index 2b88749..351b28b 100644
|
||||
obj-$(CONFIG_SCSI_PMCRAID) += pmcraid.o
|
||||
+obj-$(CONFIG_SCSI_VIRTIO) += virtio_scsi.o
|
||||
obj-$(CONFIG_VMWARE_PVSCSI) += vmw_pvscsi.o
|
||||
obj-$(CONFIG_HYPERV_STORAGE) += hv_storvsc.o
|
||||
|
||||
obj-$(CONFIG_ARM) += arm/
|
||||
diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
|
||||
new file mode 100644
|
||||
index 0000000..3f87ae0
|
||||
|
@ -1,136 +0,0 @@
|
||||
diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
|
||||
index 2571a2f..822f9e5 100644
|
||||
--- a/drivers/net/wireless/rt2x00/rt2800.h
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2800.h
|
||||
@@ -1627,6 +1627,7 @@ struct mac_iveiv_entry {
|
||||
|
||||
/*
|
||||
* H2M_MAILBOX_CSR: Host-to-MCU Mailbox.
|
||||
+ * CMD_TOKEN: Command id, 0xff disable status reporting
|
||||
*/
|
||||
#define H2M_MAILBOX_CSR 0x7010
|
||||
#define H2M_MAILBOX_CSR_ARG0 FIELD32(0x000000ff)
|
||||
@@ -1636,6 +1637,8 @@ struct mac_iveiv_entry {
|
||||
|
||||
/*
|
||||
* H2M_MAILBOX_CID:
|
||||
+ * Free slots contain 0xff. MCU will store command's token to lowest free slot.
|
||||
+ * If all slots are occupied status will be dropped.
|
||||
*/
|
||||
#define H2M_MAILBOX_CID 0x7014
|
||||
#define H2M_MAILBOX_CID_CMD0 FIELD32(0x000000ff)
|
||||
@@ -1645,6 +1648,7 @@ struct mac_iveiv_entry {
|
||||
|
||||
/*
|
||||
* H2M_MAILBOX_STATUS:
|
||||
+ * Command status will be saved to same slot as command id.
|
||||
*/
|
||||
#define H2M_MAILBOX_STATUS 0x701c
|
||||
|
||||
@@ -2259,6 +2263,12 @@ struct mac_iveiv_entry {
|
||||
|
||||
/*
|
||||
* MCU mailbox commands.
|
||||
+ * MCU_SLEEP - go to power-save mode.
|
||||
+ * arg1: 1: save as much power as possible, 0: save less power
|
||||
+ * status: 1: success, 2: already asleep,
|
||||
+ * 3: maybe MAC is busy so can't finish this task
|
||||
+ * MCU_RADIO_OFF
|
||||
+ * arg0: 0: do power-saving, NOT turn off radio
|
||||
*/
|
||||
#define MCU_SLEEP 0x30
|
||||
#define MCU_WAKEUP 0x31
|
||||
@@ -2279,7 +2289,9 @@ struct mac_iveiv_entry {
|
||||
/*
|
||||
* MCU mailbox tokens
|
||||
*/
|
||||
-#define TOKEN_WAKUP 3
|
||||
+#define TOKEN_SLEEP 1
|
||||
+#define TOKEN_RADIO_OFF 2
|
||||
+#define TOKEN_WAKEUP 3
|
||||
|
||||
/*
|
||||
* DMA descriptor defines.
|
||||
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
|
||||
index dc88bae..9ac3017 100644
|
||||
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
|
||||
@@ -517,23 +517,6 @@ static void rt2800pci_disable_radio(struct rt2x00_dev *rt2x00dev)
|
||||
}
|
||||
}
|
||||
|
||||
-static int rt2800pci_set_state(struct rt2x00_dev *rt2x00dev,
|
||||
- enum dev_state state)
|
||||
-{
|
||||
- if (state == STATE_AWAKE) {
|
||||
- rt2800_mcu_request(rt2x00dev, MCU_WAKEUP, TOKEN_WAKUP, 0, 0x02);
|
||||
- rt2800pci_mcu_status(rt2x00dev, TOKEN_WAKUP);
|
||||
- } else if (state == STATE_SLEEP) {
|
||||
- rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_STATUS,
|
||||
- 0xffffffff);
|
||||
- rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CID,
|
||||
- 0xffffffff);
|
||||
- rt2800_mcu_request(rt2x00dev, MCU_SLEEP, 0x01, 0xff, 0x01);
|
||||
- }
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
static int rt2800pci_set_device_state(struct rt2x00_dev *rt2x00dev,
|
||||
enum dev_state state)
|
||||
{
|
||||
@@ -541,14 +524,20 @@ static int rt2800pci_set_device_state(struct rt2x00_dev *rt2x00dev,
|
||||
|
||||
switch (state) {
|
||||
case STATE_RADIO_ON:
|
||||
- /*
|
||||
- * Before the radio can be enabled, the device first has
|
||||
- * to be woken up. After that it needs a bit of time
|
||||
- * to be fully awake and then the radio can be enabled.
|
||||
- */
|
||||
- rt2800pci_set_state(rt2x00dev, STATE_AWAKE);
|
||||
- msleep(1);
|
||||
+ /* Initialise all registers and send MCU_BOOT_SIGNAL. */
|
||||
retval = rt2800pci_enable_radio(rt2x00dev);
|
||||
+
|
||||
+ /* After resume MCU_BOOT_SIGNAL will trash those. */
|
||||
+ rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_STATUS, ~0);
|
||||
+ rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0);
|
||||
+
|
||||
+ /* Finish initialization procedure. */
|
||||
+ rt2800_mcu_request(rt2x00dev, MCU_SLEEP, TOKEN_RADIO_OFF,
|
||||
+ 0xff, 0x02);
|
||||
+ rt2800pci_mcu_status(rt2x00dev, TOKEN_RADIO_OFF);
|
||||
+
|
||||
+ rt2800_mcu_request(rt2x00dev, MCU_WAKEUP, TOKEN_WAKEUP, 0, 0);
|
||||
+ rt2800pci_mcu_status(rt2x00dev, TOKEN_WAKEUP);
|
||||
break;
|
||||
case STATE_RADIO_OFF:
|
||||
/*
|
||||
@@ -556,7 +545,7 @@ static int rt2800pci_set_device_state(struct rt2x00_dev *rt2x00dev,
|
||||
* be put to sleep for powersaving.
|
||||
*/
|
||||
rt2800pci_disable_radio(rt2x00dev);
|
||||
- rt2800pci_set_state(rt2x00dev, STATE_SLEEP);
|
||||
+ rt2800pci_set_device_state(rt2x00dev, STATE_SLEEP);
|
||||
break;
|
||||
case STATE_RADIO_IRQ_ON:
|
||||
case STATE_RADIO_IRQ_OFF:
|
||||
@@ -565,8 +554,16 @@ static int rt2800pci_set_device_state(struct rt2x00_dev *rt2x00dev,
|
||||
case STATE_DEEP_SLEEP:
|
||||
case STATE_SLEEP:
|
||||
case STATE_STANDBY:
|
||||
+ /* PCIe devices won't report status after SLEEP request. */
|
||||
+ rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_STATUS, ~0);
|
||||
+ rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0);
|
||||
+ rt2800_mcu_request(rt2x00dev, MCU_SLEEP, TOKEN_SLEEP,
|
||||
+ 0xff, 0x01);
|
||||
+ break;
|
||||
case STATE_AWAKE:
|
||||
- retval = rt2800pci_set_state(rt2x00dev, state);
|
||||
+ rt2800_mcu_request(rt2x00dev, MCU_WAKEUP, TOKEN_WAKEUP,
|
||||
+ 0, 0x02);
|
||||
+ rt2800pci_mcu_status(rt2x00dev, TOKEN_WAKEUP);
|
||||
break;
|
||||
default:
|
||||
retval = -ENOTSUPP;
|
1
sources
1
sources
@ -1 +1,2 @@
|
||||
7133f5a2086a7d7ef97abac610c094f5 linux-3.3.tar.xz
|
||||
fe8e2b8e93695cb876cc8394b3db83c4 patch-3.3-git1.xz
|
||||
|
@ -1,48 +0,0 @@
|
||||
From dadfe1ad137e6fbe251b4a5dc310840cfe414db4 Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@redhat.com>
|
||||
Date: Mon, 20 Feb 2012 15:28:39 -0500
|
||||
Subject: [PATCH] ums_realtek: do not use stack memory for DMA in
|
||||
__do_config_autodelink
|
||||
|
||||
__do_config_autodelink passes the data variable to the transport function.
|
||||
If the calling functions pass a stack variable, this will eventually trigger
|
||||
a DMA-API debug backtrace for mapping stack memory in the DMA buffer. Fix
|
||||
this by calling kmemdup for the passed data instead.
|
||||
|
||||
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
|
||||
---
|
||||
drivers/usb/storage/realtek_cr.c | 8 +++++++-
|
||||
1 files changed, 7 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/storage/realtek_cr.c b/drivers/usb/storage/realtek_cr.c
|
||||
index d32f720..eee2a96 100644
|
||||
--- a/drivers/usb/storage/realtek_cr.c
|
||||
+++ b/drivers/usb/storage/realtek_cr.c
|
||||
@@ -507,9 +507,14 @@ static int __do_config_autodelink(struct us_data *us, u8 *data, u16 len)
|
||||
{
|
||||
int retval;
|
||||
u8 cmnd[12] = {0};
|
||||
+ u8 *buf;
|
||||
|
||||
US_DEBUGP("%s, addr = 0xfe47, len = %d\n", __FUNCTION__, len);
|
||||
|
||||
+ buf = kmemdup(data, len, GFP_NOIO);
|
||||
+ if (!buf)
|
||||
+ return USB_STOR_TRANSPORT_ERROR;
|
||||
+
|
||||
cmnd[0] = 0xF0;
|
||||
cmnd[1] = 0x0E;
|
||||
cmnd[2] = 0xfe;
|
||||
@@ -517,7 +522,8 @@ static int __do_config_autodelink(struct us_data *us, u8 *data, u16 len)
|
||||
cmnd[4] = (u8)(len >> 8);
|
||||
cmnd[5] = (u8)len;
|
||||
|
||||
- retval = rts51x_bulk_transport_special(us, 0, cmnd, 12, data, len, DMA_TO_DEVICE, NULL);
|
||||
+ retval = rts51x_bulk_transport_special(us, 0, cmnd, 12, buf, len, DMA_TO_DEVICE, NULL);
|
||||
+ kfree(buf);
|
||||
if (retval != USB_STOR_TRANSPORT_GOOD) {
|
||||
return -EIO;
|
||||
}
|
||||
--
|
||||
1.7.9
|
||||
|
4696
utrace.patch
4696
utrace.patch
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user