1. 11 Feb, 2009 1 commit
    • Jeremy Fitzhardinge's avatar
      Merge commit 'remotes/tip/x86/paravirt' into x86/untangle2 · 9049a11d
      Jeremy Fitzhardinge authored
      * commit 'remotes/tip/x86/paravirt': (175 commits)
        xen: use direct ops on 64-bit
        xen: make direct versions of irq_enable/disable/save/restore to common code
        xen: setup percpu data pointers
        xen: fix 32-bit build resulting from mmu move
        x86/paravirt: return full 64-bit result
        x86, percpu: fix kexec with vmlinux
        x86/vmi: fix interrupt enable/disable/save/restore calling convention.
        x86/paravirt: don't restore second return reg
        xen: setup percpu data pointers
        x86: split loading percpu segments from loading gdt
        x86: pass in cpu number to switch_to_new_gdt()
        x86: UV fix uv_flush_send_and_wait()
        x86/paravirt: fix missing callee-save call on pud_val
        x86/paravirt: use callee-saved convention for pte_val/make_pte/etc
        x86/paravirt: implement PVOP_CALL macros for callee-save functions
        x86/paravirt: add register-saving thunks to reduce caller register pressure
        x86/paravirt: selectively save/restore regs around pvops calls
        x86: fix paravirt clobber in entry_64.S
        x86/pvops: add a paravirt_ident functions to allow special patching
        xen: move remaining mmu-related stuff into mmu.c
        ...
      
      Conflicts:
      	arch/x86/mach-voyager/voyager_smp.c
      	arch/x86/mm/fault.c
      9049a11d
  2. 09 Feb, 2009 4 commits
    • Ingo Molnar's avatar
      x86, pgtable.h: fix 2-level 32-bit build · c47c1b1f
      Ingo Molnar authored
      - pmd_flags() needs to be available on 2-levels too
      - provide pud_large() wrapper as well
      - include page.h - it provides basic types relied on by pgtable.h
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      c47c1b1f
    • Ingo Molnar's avatar
      x86, pgtable.h: macro-ify *_page() methods · e5f7f202
      Ingo Molnar authored
      The p?d_page() methods still rely on highlevel types and methods:
      
      In file included from arch/x86/kernel/early_printk.c:18:
      /home/mingo/tip/arch/x86/include/asm/pgtable.h: In function ‘pmd_page’:
      /home/mingo/tip/arch/x86/include/asm/pgtable.h:516: error: implicit declaration of function ‘__pfn_to_section’
      /home/mingo/tip/arch/x86/include/asm/pgtable.h:516: error: initialization makes pointer from integer without a cast
      /home/mingo/tip/arch/x86/include/asm/pgtable.h:516: error: implicit declaration of function ‘__section_mem_map_addr’
      /home/mingo/tip/arch/x86/include/asm/pgtable.h:516: error: return makes pointer from integer without a cast
      
      So convert them to macros and document the type dependency.
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      e5f7f202
    • Ingo Molnar's avatar
      x86: early_printk.c - fix pgtable.h unification fallout · 726c0d95
      Ingo Molnar authored
       arch/x86/kernel/early_printk.c: In function ‘early_dbgp_init’:
       arch/x86/kernel/early_printk.c:827: error: ‘PAGE_KERNEL_NOCACHE’ undeclared (first use in this function)
       arch/x86/kernel/early_printk.c:827: error: (Each undeclared identifier is reported only once
       arch/x86/kernel/early_printk.c:827: error: for each function it appears in.)
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      726c0d95
    • Ingo Molnar's avatar
      Merge branch 'jsgf/x86/unify' of... · 790c7ebb
      Ingo Molnar authored
      Merge branch 'jsgf/x86/unify' of git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen into x86/headers
      790c7ebb
  3. 08 Feb, 2009 11 commits
  4. 07 Feb, 2009 18 commits
  5. 06 Feb, 2009 6 commits
    • Jeremy Fitzhardinge's avatar
      x86: Fix compile error in arch/x86/kernel/early_printk.c · fb08b20f
      Jeremy Fitzhardinge authored
      Fix compile problem:
      
        CC      arch/x86/kernel/early_printk.o
      In file included from /home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/early_printk.c:17:
      /home/jeremy/hg/xen/paravirt/linux/arch/x86/include/asm/pgtable.h: In function 'pmd_page':
      /home/jeremy/hg/xen/paravirt/linux/arch/x86/include/asm/pgtable.h:516: error: implicit declaration of function '__pfn_to_section'
      /home/jeremy/hg/xen/paravirt/linux/arch/x86/include/asm/pgtable.h:516: warning: initialization makes pointer from integer without a cast
      /home/jeremy/hg/xen/paravirt/linux/arch/x86/include/asm/pgtable.h:516: error: implicit declaration of function '__section_mem_map_addr'
      /home/jeremy/hg/xen/paravirt/linux/arch/x86/include/asm/pgtable.h:516: warning: return makes pointer from integer without a cast
      /home/jeremy/hg/xen/paravirt/linux/arch/x86/include/asm/pgtable.h: In function 'pud_page':
      /home/jeremy/hg/xen/paravirt/linux/arch/x86/include/asm/pgtable.h:586: warning: initialization makes pointer from integer without a cast
      /home/jeremy/hg/xen/paravirt/linux/arch/x86/include/asm/pgtable.h:586: warning: return makes pointer from integer without a cast
      /home/jeremy/hg/xen/paravirt/linux/arch/x86/include/asm/pgtable.h: In function 'pgd_page':
      /home/jeremy/hg/xen/paravirt/linux/arch/x86/include/asm/pgtable.h:625: warning: initialization makes pointer from integer without a cast
      /home/jeremy/hg/xen/paravirt/linux/arch/x86/include/asm/pgtable.h:625: warning: return makes pointer from integer without a cast
      
      This is a cycling dependency between asm/pgtable.h and linux/mmzone.h
      when using CONFIG_SPARSEMEM.  Rather than hacking up the headers some
      more, remove asm/pgtable.h, since early_printk.c doesn't actually need
      it.
      Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
      fb08b20f
    • David Howells's avatar
      CRED: Fix SUID exec regression · 0bf2f3ae
      David Howells authored
      The patch:
      
      	commit a6f76f23
      	CRED: Make execve() take advantage of copy-on-write credentials
      
      moved the place in which the 'safeness' of a SUID/SGID exec was performed to
      before de_thread() was called.  This means that LSM_UNSAFE_SHARE is now
      calculated incorrectly.  This flag is set if any of the usage counts for
      fs_struct, files_struct and sighand_struct are greater than 1 at the time the
      determination is made.  All of which are true for threads created by the
      pthread library.
      
      However, since we wish to make the security calculation before irrevocably
      damaging the process so that we can return it an error code in the case where
      we decide we want to reject the exec request on this basis, we have to make the
      determination before calling de_thread().
      
      So, instead, we count up the number of threads (CLONE_THREAD) that are sharing
      our fs_struct (CLONE_FS), files_struct (CLONE_FILES) and sighand_structs
      (CLONE_SIGHAND/CLONE_THREAD) with us.  These will be killed by de_thread() and
      so can be discounted by check_unsafe_exec().
      
      We do have to be careful because CLONE_THREAD does not imply FS or FILES.
      
      We _assume_ that there will be no extra references to these structs held by the
      threads we're going to kill.
      
      This can be tested with the attached pair of programs.  Build the two programs
      using the Makefile supplied, and run ./test1 as a non-root user.  If
      successful, you should see something like:
      
      	[dhowells@andromeda tmp]$ ./test1
      	--TEST1--
      	uid=4043, euid=4043 suid=4043
      	exec ./test2
      	--TEST2--
      	uid=4043, euid=0 suid=0
      	SUCCESS - Correct effective user ID
      
      and if unsuccessful, something like:
      
      	[dhowells@andromeda tmp]$ ./test1
      	--TEST1--
      	uid=4043, euid=4043 suid=4043
      	exec ./test2
      	--TEST2--
      	uid=4043, euid=4043 suid=4043
      	ERROR - Incorrect effective user ID!
      
      The non-root user ID you see will depend on the user you run as.
      
      [test1.c]
      #include <stdio.h>
      #include <stdlib.h>
      #include <unistd.h>
      #include <pthread.h>
      
      static void *thread_func(void *arg)
      {
      	while (1) {}
      }
      
      int main(int argc, char **argv)
      {
      	pthread_t tid;
      	uid_t uid, euid, suid;
      
      	printf("--TEST1--\n");
      	getresuid(&uid, &euid, &suid);
      	printf("uid=%d, euid=%d suid=%d\n", uid, euid, suid);
      
      	if (pthread_create(&tid, NULL, thread_func, NULL) < 0) {
      		perror("pthread_create");
      		exit(1);
      	}
      
      	printf("exec ./test2\n");
      	execlp("./test2", "test2", NULL);
      	perror("./test2");
      	_exit(1);
      }
      
      [test2.c]
      #include <stdio.h>
      #include <stdlib.h>
      #include <unistd.h>
      
      int main(int argc, char **argv)
      {
      	uid_t uid, euid, suid;
      
      	getresuid(&uid, &euid, &suid);
      	printf("--TEST2--\n");
      	printf("uid=%d, euid=%d suid=%d\n", uid, euid, suid);
      
      	if (euid != 0) {
      		fprintf(stderr, "ERROR - Incorrect effective user ID!\n");
      		exit(1);
      	}
      	printf("SUCCESS - Correct effective user ID\n");
      	exit(0);
      }
      
      [Makefile]
      CFLAGS = -D_GNU_SOURCE -Wall -Werror -Wunused
      all: test1 test2
      
      test1: test1.c
      	gcc $(CFLAGS) -o test1 test1.c -lpthread
      
      test2: test2.c
      	gcc $(CFLAGS) -o test2 test2.c
      	sudo chown root.root test2
      	sudo chmod +s test2
      Reported-by: default avatarDavid Smith <dsmith@redhat.com>
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Acked-by: default avatarDavid Smith <dsmith@redhat.com>
      Signed-off-by: default avatarJames Morris <jmorris@namei.org>
      0bf2f3ae
    • Dave Kleikamp's avatar
      vfs: Don't call attach_nobh_buffers() with an empty list · d4cf109f
      Dave Kleikamp authored
      This is a modification of a patch by Bill Pemberton <wfp5p@virginia.edu>
      
      nobh_write_end() could call attach_nobh_buffers() with head == NULL.
      This would result in a trap when attach_nobh_buffers() attempted to
      access bh->b_this_page.
      
      This can be illustrated by running the writev01 testcase from LTP on jfs.
      
      This error was introduced by commit 5b41e74a "vfs: fix data leak in
      nobh_write_end()".  That patch did not take into account that if
      PageMappedToDisk() is true upon entry to nobh_write_begin(), then no
      buffers will be allocated for the page.  In that case, we won't have to
      worry about a failed write leaving unitialized data in the page.
      
      Of course, head != NULL implies !page_has_buffers(page), so no need to
      test both.
      Signed-off-by: default avatarDave Kleikamp <shaggy@linux.vnet.ibm.com>
      Cc: Bill Pemberton <wfp5p@virginia.edu>
      Cc: Dmitri Monakhov <dmonakhov@openvz.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d4cf109f
    • Jeremy Fitzhardinge's avatar
      x86: asm/io.h: unify ioremap prototypes · 133822c5
      Jeremy Fitzhardinge authored
      Impact: unify identical code
      
      asm/io_32.h and _64.h have identical prototypes for the ioremap family
      of functions.  The 32-bit header had a more descriptive comment.
      Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
      133822c5
    • Jeremy Fitzhardinge's avatar
      x86: asm/io.h: unify virt_to_phys/phys_to_virt · 976e8f67
      Jeremy Fitzhardinge authored
      Impact: unify identical code
      
      asm/io_32.h and _64.h has functionally identical definitions for
      virt_to_phys, phys_to_virt, page_to_phys, and the isa_* variants, so
      just unify them.
      
      The only slightly functional change is using phys_addr_t for the
      physical address argument and return val.
      Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
      976e8f67
    • Jeremy Fitzhardinge's avatar
      x86: make pgd/pud/pmd/pte_none consistent · 26c8e317
      Jeremy Fitzhardinge authored
      The _none test is done differently for every level of the pagetable.
      Standardize them by:
      
       1: Use the native_X_val to extract the raw entry, with no need to go
          via paravirt_ops, diff -r 1d0646d0d319 arch/x86/include/asm/pgtable.h, and
       2: Compare with 0 rather than using a boolean !, since they are actually values
          and not booleans.
      Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
      26c8e317