Showing error 759

User: Jiri Slaby
Error type: Invalid Pointer Dereference
Error type description: A pointer which is invalid is being dereferenced
File location: fs/compat_binfmt_elf.c
Line in file: 1552
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2011-11-07 22:22:22 UTC


Source:

  1/*
  2 * 32-bit compatibility support for ELF format executables and core dumps.
  3 *
  4 * Copyright (C) 2007 Red Hat, Inc.  All rights reserved.
  5 *
  6 * This copyrighted material is made available to anyone wishing to use,
  7 * modify, copy, or redistribute it subject to the terms and conditions
  8 * of the GNU General Public License v.2.
  9 *
 10 * Red Hat Author: Roland McGrath.
 11 *
 12 * This file is used in a 64-bit kernel that wants to support 32-bit ELF.
 13 * asm/elf.h is responsible for defining the compat_* and COMPAT_* macros
 14 * used below, with definitions appropriate for 32-bit ABI compatibility.
 15 *
 16 * We use macros to rename the ABI types and machine-dependent
 17 * functions used in binfmt_elf.c to compat versions.
 18 */
 19
 20#include <linux/elfcore-compat.h>
 21#include <linux/time.h>
 22
 23/*
 24 * Rename the basic ELF layout types to refer to the 32-bit class of files.
 25 */
 26#undef        ELF_CLASS
 27#define ELF_CLASS        ELFCLASS32
 28
 29#undef        elfhdr
 30#undef        elf_phdr
 31#undef        elf_note
 32#undef        elf_addr_t
 33#define elfhdr                elf32_hdr
 34#define elf_phdr        elf32_phdr
 35#define elf_note        elf32_note
 36#define elf_addr_t        Elf32_Addr
 37
 38/*
 39 * The machine-dependent core note format types are defined in elfcore-compat.h,
 40 * which requires asm/elf.h to define compat_elf_gregset_t et al.
 41 */
 42#define elf_prstatus        compat_elf_prstatus
 43#define elf_prpsinfo        compat_elf_prpsinfo
 44
 45/*
 46 * Compat version of cputime_to_compat_timeval, perhaps this
 47 * should be an inline in <linux/compat.h>.
 48 */
 49static void cputime_to_compat_timeval(const cputime_t cputime,
 50                                      struct compat_timeval *value)
 51{
 52        struct timeval tv;
 53        cputime_to_timeval(cputime, &tv);
 54        value->tv_sec = tv.tv_sec;
 55        value->tv_usec = tv.tv_usec;
 56}
 57
 58#undef cputime_to_timeval
 59#define cputime_to_timeval cputime_to_compat_timeval
 60
 61
 62/*
 63 * To use this file, asm/elf.h must define compat_elf_check_arch.
 64 * The other following macros can be defined if the compat versions
 65 * differ from the native ones, or omitted when they match.
 66 */
 67
 68#undef        ELF_ARCH
 69#undef        elf_check_arch
 70#define        elf_check_arch        compat_elf_check_arch
 71
 72#ifdef        COMPAT_ELF_PLATFORM
 73#undef        ELF_PLATFORM
 74#define        ELF_PLATFORM                COMPAT_ELF_PLATFORM
 75#endif
 76
 77#ifdef        COMPAT_ELF_HWCAP
 78#undef        ELF_HWCAP
 79#define        ELF_HWCAP                COMPAT_ELF_HWCAP
 80#endif
 81
 82#ifdef        COMPAT_ARCH_DLINFO
 83#undef        ARCH_DLINFO
 84#define        ARCH_DLINFO                COMPAT_ARCH_DLINFO
 85#endif
 86
 87#ifdef        COMPAT_ELF_ET_DYN_BASE
 88#undef        ELF_ET_DYN_BASE
 89#define        ELF_ET_DYN_BASE                COMPAT_ELF_ET_DYN_BASE
 90#endif
 91
 92#ifdef COMPAT_ELF_EXEC_PAGESIZE
 93#undef        ELF_EXEC_PAGESIZE
 94#define        ELF_EXEC_PAGESIZE        COMPAT_ELF_EXEC_PAGESIZE
 95#endif
 96
 97#ifdef        COMPAT_ELF_PLAT_INIT
 98#undef        ELF_PLAT_INIT
 99#define        ELF_PLAT_INIT                COMPAT_ELF_PLAT_INIT
100#endif
101
102#ifdef        COMPAT_SET_PERSONALITY
103#undef        SET_PERSONALITY
104#define        SET_PERSONALITY                COMPAT_SET_PERSONALITY
105#endif
106
107#ifdef        compat_start_thread
108#undef        start_thread
109#define        start_thread                compat_start_thread
110#endif
111
112#ifdef        compat_arch_setup_additional_pages
113#undef        ARCH_HAS_SETUP_ADDITIONAL_PAGES
114#define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
115#undef        arch_setup_additional_pages
116#define        arch_setup_additional_pages compat_arch_setup_additional_pages
117#endif
118
119/*
120 * Rename a few of the symbols that binfmt_elf.c will define.
121 * These are all local so the names don't really matter, but it
122 * might make some debugging less confusing not to duplicate them.
123 */
124#define elf_format                compat_elf_format
125#define init_elf_binfmt                init_compat_elf_binfmt
126#define exit_elf_binfmt                exit_compat_elf_binfmt
127
128/*
129 * We share all the actual code with the native (64-bit) version.
130 */
131#include "binfmt_elf.c"