~ubuntu-branches/ubuntu/trusty/linux-linaro-omap/trusty

« back to all changes in this revision

Viewing changes to kernel/sys.c

  • Committer: Package Import Robot
  • Author(s): John Rigby, John Rigby
  • Date: 2011-09-26 10:44:23 UTC
  • Revision ID: package-import@ubuntu.com-20110926104423-57i0gl3v99b3lkfg
Tags: 3.0.0-1007.9
[ John Rigby ]

Enable crypto modules and remove crypto-modules from
exclude-module files
LP: #826021

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
#include <linux/fs_struct.h>
39
39
#include <linux/gfp.h>
40
40
#include <linux/syscore_ops.h>
 
41
#include <linux/version.h>
 
42
#include <linux/ctype.h>
41
43
 
42
44
#include <linux/compat.h>
43
45
#include <linux/syscalls.h>
45
47
#include <linux/user_namespace.h>
46
48
 
47
49
#include <linux/kmsg_dump.h>
 
50
/* Move somewhere else to avoid recompiling? */
 
51
#include <generated/utsrelease.h>
48
52
 
49
53
#include <asm/uaccess.h>
50
54
#include <asm/io.h>
314
318
{
315
319
        blocking_notifier_call_chain(&reboot_notifier_list, SYS_RESTART, cmd);
316
320
        system_state = SYSTEM_RESTART;
 
321
        usermodehelper_disable();
317
322
        device_shutdown();
318
323
        syscore_shutdown();
319
324
}
343
348
        blocking_notifier_call_chain(&reboot_notifier_list,
344
349
                (state == SYSTEM_HALT)?SYS_HALT:SYS_POWER_OFF, NULL);
345
350
        system_state = state;
 
351
        usermodehelper_disable();
346
352
        device_shutdown();
347
353
}
348
354
/**
1122
1128
#define override_architecture(name)     0
1123
1129
#endif
1124
1130
 
 
1131
/*
 
1132
 * Work around broken programs that cannot handle "Linux 3.0".
 
1133
 * Instead we map 3.x to 2.6.40+x, so e.g. 3.0 would be 2.6.40
 
1134
 */
 
1135
static int override_release(char __user *release, int len)
 
1136
{
 
1137
        int ret = 0;
 
1138
        char buf[len];
 
1139
 
 
1140
        if (current->personality & UNAME26) {
 
1141
                char *rest = UTS_RELEASE;
 
1142
                int ndots = 0;
 
1143
                unsigned v;
 
1144
 
 
1145
                while (*rest) {
 
1146
                        if (*rest == '.' && ++ndots >= 3)
 
1147
                                break;
 
1148
                        if (!isdigit(*rest) && *rest != '.')
 
1149
                                break;
 
1150
                        rest++;
 
1151
                }
 
1152
                v = ((LINUX_VERSION_CODE >> 8) & 0xff) + 40;
 
1153
                snprintf(buf, len, "2.6.%u%s", v, rest);
 
1154
                ret = copy_to_user(release, buf, len);
 
1155
        }
 
1156
        return ret;
 
1157
}
 
1158
 
1125
1159
SYSCALL_DEFINE1(newuname, struct new_utsname __user *, name)
1126
1160
{
1127
1161
        int errno = 0;
1131
1165
                errno = -EFAULT;
1132
1166
        up_read(&uts_sem);
1133
1167
 
 
1168
        if (!errno && override_release(name->release, sizeof(name->release)))
 
1169
                errno = -EFAULT;
1134
1170
        if (!errno && override_architecture(name))
1135
1171
                errno = -EFAULT;
1136
1172
        return errno;
1152
1188
                error = -EFAULT;
1153
1189
        up_read(&uts_sem);
1154
1190
 
 
1191
        if (!error && override_release(name->release, sizeof(name->release)))
 
1192
                error = -EFAULT;
1155
1193
        if (!error && override_architecture(name))
1156
1194
                error = -EFAULT;
1157
1195
        return error;
1186
1224
 
1187
1225
        if (!error && override_architecture(name))
1188
1226
                error = -EFAULT;
 
1227
        if (!error && override_release(name->release, sizeof(name->release)))
 
1228
                error = -EFAULT;
1189
1229
        return error ? -EFAULT : 0;
1190
1230
}
1191
1231
#endif
1702
1742
                case PR_SET_SECCOMP:
1703
1743
                        error = prctl_set_seccomp(arg2);
1704
1744
                        break;
 
1745
                case PR_SET_SECCOMP_FILTER:
 
1746
                        error = prctl_set_seccomp_filter(arg2, arg3,
 
1747
                                                         (char __user *) arg4);
 
1748
                        break;
 
1749
                case PR_CLEAR_SECCOMP_FILTER:
 
1750
                        error = prctl_clear_seccomp_filter(arg2, arg3);
 
1751
                        break;
 
1752
                case PR_GET_SECCOMP_FILTER:
 
1753
                        error = prctl_get_seccomp_filter(arg2, arg3,
 
1754
                                                         (char __user *) arg4,
 
1755
                                                         arg5);
 
1756
                        break;
1705
1757
                case PR_GET_TSC:
1706
1758
                        error = GET_TSC_CTL(arg2);
1707
1759
                        break;