get rid of legacy 'get_ds()' function
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 4 Mar 2019 18:39:05 +0000 (10:39 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 4 Mar 2019 18:50:14 +0000 (10:50 -0800)
Every in-kernel use of this function defined it to KERNEL_DS (either as
an actual define, or as an inline function).  It's an entirely
historical artifact, and long long long ago used to actually read the
segment selector valueof '%ds' on x86.

Which in the kernel is always KERNEL_DS.

Inspired by a patch from Jann Horn that just did this for a very small
subset of users (the ones in fs/), along with Al who suggested a script.
I then just took it to the logical extreme and removed all the remaining
gunk.

Roughly scripted with

   git grep -l '(get_ds())' -- :^tools/ | xargs sed -i 's/(get_ds())/(KERNEL_DS)/'
   git grep -lw 'get_ds' -- :^tools/ | xargs sed -i '/^#define get_ds()/d'

plus manual fixups to remove a few unusual usage patterns, the couple of
inline function cases and to fix up a comment that had become stale.

The 'get_ds()' function remains in an x86 kvm selftest, since in user
space it actually does something relevant.

Inspired-by: Jann Horn <jannh@google.com>
Inspired-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
33 files changed:
arch/alpha/include/asm/uaccess.h
arch/arm/include/asm/uaccess.h
arch/arm/kernel/process.c
arch/arm/xen/hypercall.S
arch/arm64/include/asm/uaccess.h
arch/csky/include/asm/segment.h
arch/h8300/include/asm/segment.h
arch/ia64/include/asm/uaccess.h
arch/m68k/include/asm/segment.h
arch/microblaze/include/asm/uaccess.h
arch/mips/include/asm/uaccess.h
arch/mips/kernel/ftrace.c
arch/mips/kernel/kgdb.c
arch/mips/kernel/traps.c
arch/nds32/include/asm/uaccess.h
arch/nds32/kernel/process.c
arch/nios2/include/asm/uaccess.h
arch/openrisc/include/asm/uaccess.h
arch/parisc/include/asm/uaccess.h
arch/powerpc/include/asm/uaccess.h
arch/riscv/include/asm/uaccess.h
arch/s390/include/asm/uaccess.h
arch/sh/include/asm/segment.h
arch/sparc/include/asm/uaccess_32.h
arch/sparc/include/asm/uaccess_64.h
arch/x86/include/asm/uaccess.h
arch/xtensa/include/asm/asm-uaccess.h
arch/xtensa/include/asm/uaccess.h
drivers/staging/rtl8723bs/os_dep/osdep_service.c
fs/read_write.c
fs/splice.c
include/asm-generic/uaccess.h
security/integrity/iint.c

index cf4ac791a592fdf8dc595e9407182c85bdac4243..1fe2b56cb861fe4150785699ded8f29fc8132baf 100644 (file)
@@ -18,7 +18,6 @@
 #define USER_DS                ((mm_segment_t) { -0x40000000000UL })
 
 #define get_fs()  (current_thread_info()->addr_limit)
-#define get_ds()  (KERNEL_DS)
 #define set_fs(x) (current_thread_info()->addr_limit = (x))
 
 #define segment_eq(a, b)       ((a).seg == (b).seg)
index 42aa4a22803c2760d7799bdd17b4434d9cc387bd..ae5a0df5316e5780121bcc8de5f78b847222e9e7 100644 (file)
@@ -59,7 +59,6 @@ extern int __put_user_bad(void);
  * Note that this is actually 0x1,0000,0000
  */
 #define KERNEL_DS      0x00000000
-#define get_ds()       (KERNEL_DS)
 
 #ifdef CONFIG_MMU
 
index 16601d1442d1767b4498442b8454a31afb34268d..72cc0862a30e9a96722716e561cd9633d752cdc6 100644 (file)
@@ -150,7 +150,7 @@ void __show_regs(struct pt_regs *regs)
                if ((domain & domain_mask(DOMAIN_USER)) ==
                    domain_val(DOMAIN_USER, DOMAIN_NOACCESS))
                        segment = "none";
-               else if (fs == get_ds())
+               else if (fs == KERNEL_DS)
                        segment = "kernel";
                else
                        segment = "user";
index b0b80c0f09f31e30aba022e317b4d9a19daaccbd..b11bba542faccc4889abe8b5571b583e83ee0479 100644 (file)
@@ -113,8 +113,7 @@ ENTRY(privcmd_call)
 
        /*
         * Disable userspace access from kernel. This is fine to do it
-        * unconditionally as no set_fs(KERNEL_DS)/set_fs(get_ds()) is
-        * called before.
+        * unconditionally as no set_fs(KERNEL_DS) is called before.
         */
        uaccess_disable r4
 
index 547d7a0c9d05bdfa30cc102acbc4a7c403d5bfc6..f1e5c9165809ea589e1923bdd09cbf881836ff91 100644 (file)
@@ -34,7 +34,6 @@
 #include <asm/memory.h>
 #include <asm/extable.h>
 
-#define get_ds()       (KERNEL_DS)
 #define get_fs()       (current_thread_info()->addr_limit)
 
 static inline void set_fs(mm_segment_t fs)
index ffdc4c47ff4338322666ffc95b0cb39b75ef3af2..db2640d5f57591f32adb9b9508daf2233358582c 100644 (file)
@@ -9,7 +9,6 @@ typedef struct {
 } mm_segment_t;
 
 #define KERNEL_DS              ((mm_segment_t) { 0xFFFFFFFF })
-#define get_ds()               KERNEL_DS
 
 #define USER_DS                        ((mm_segment_t) { 0x80000000UL })
 #define get_fs()               (current_thread_info()->addr_limit)
index 9adbf7e1aaa395e4337ab3b2e5e4729db9c2dc2c..a407978f9f9fb8219f64f4561fbe80cfc91678e3 100644 (file)
@@ -33,12 +33,6 @@ static inline mm_segment_t get_fs(void)
        return USER_DS;
 }
 
-static inline mm_segment_t get_ds(void)
-{
-       /* return the supervisor data space code */
-       return KERNEL_DS;
-}
-
 #define segment_eq(a, b)       ((a).seg == (b).seg)
 
 #endif /* __ASSEMBLY__ */
index 306d469e43da6d45e5b7bb2b5aac58f387fd9955..89782ad3fb887b98ce5913b56841375e4ad143a9 100644 (file)
@@ -48,7 +48,6 @@
 #define KERNEL_DS      ((mm_segment_t) { ~0UL })               /* cf. access_ok() */
 #define USER_DS                ((mm_segment_t) { TASK_SIZE-1 })        /* cf. access_ok() */
 
-#define get_ds()  (KERNEL_DS)
 #define get_fs()  (current_thread_info()->addr_limit)
 #define set_fs(x) (current_thread_info()->addr_limit = (x))
 
index 0b4cc1e079b5e5a8cf37df88b720198417f2de24..c6686559e9b742f5df781efac658a9c6f57553a3 100644 (file)
@@ -45,16 +45,9 @@ static inline void set_fs(mm_segment_t val)
                              : /* no outputs */ : "r" (val.seg) : "memory");
 }
 
-static inline mm_segment_t get_ds(void)
-{
-    /* return the supervisor data space code */
-    return KERNEL_DS;
-}
-
 #else
 #define USER_DS                MAKE_MM_SEG(TASK_SIZE)
 #define KERNEL_DS      MAKE_MM_SEG(0xFFFFFFFF)
-#define get_ds()       (KERNEL_DS)
 #define get_fs()       (current_thread_info()->addr_limit)
 #define set_fs(x)      (current_thread_info()->addr_limit = (x))
 #endif
index dbfea093a7c7db596bd2e108a0a47220b7698457..bff2a71c828a349aeb9eafb8de43b2c7c2263612 100644 (file)
@@ -42,7 +42,6 @@
 #  define USER_DS      MAKE_MM_SEG(TASK_SIZE - 1)
 #  endif
 
-# define get_ds()      (KERNEL_DS)
 # define get_fs()      (current_thread_info()->addr_limit)
 # define set_fs(val)   (current_thread_info()->addr_limit = (val))
 
index d43c1dc6ef157a59c4b96d456aacc9d69ce077ed..62b298c50905f67cdcd2221c5d28ae179a195a7d 100644 (file)
@@ -69,7 +69,6 @@ extern u64 __ua_limit;
 #define USER_DS                ((mm_segment_t) { __UA_LIMIT })
 #endif
 
-#define get_ds()       (KERNEL_DS)
 #define get_fs()       (current_thread_info()->addr_limit)
 #define set_fs(x)      (current_thread_info()->addr_limit = (x))
 
index 2ea0ec95efe9b7f31974cb0cbbb9872c92389a6e..4b5e1f2bfbcea85f6b3c339bdd3c0efaf491beb9 100644 (file)
@@ -86,7 +86,7 @@ static int ftrace_modify_code(unsigned long ip, unsigned int new_code)
                return -EFAULT;
 
        old_fs = get_fs();
-       set_fs(get_ds());
+       set_fs(KERNEL_DS);
        flush_icache_range(ip, ip + 8);
        set_fs(old_fs);
 
@@ -111,7 +111,7 @@ static int ftrace_modify_code_2(unsigned long ip, unsigned int new_code1,
 
        ip -= 4;
        old_fs = get_fs();
-       set_fs(get_ds());
+       set_fs(KERNEL_DS);
        flush_icache_range(ip, ip + 8);
        set_fs(old_fs);
 
@@ -135,7 +135,7 @@ static int ftrace_modify_code_2r(unsigned long ip, unsigned int new_code1,
                return -EFAULT;
 
        old_fs = get_fs();
-       set_fs(get_ds());
+       set_fs(KERNEL_DS);
        flush_icache_range(ip, ip + 8);
        set_fs(old_fs);
 
index 149100e1bc7c4687903d929e6b9a33700b199454..6e574c02e4c3b81137618c97fe9bc176c5a40d52 100644 (file)
@@ -212,7 +212,7 @@ void kgdb_call_nmi_hook(void *ignored)
        mm_segment_t old_fs;
 
        old_fs = get_fs();
-       set_fs(get_ds());
+       set_fs(KERNEL_DS);
 
        kgdb_nmicallback(raw_smp_processor_id(), NULL);
 
@@ -318,7 +318,7 @@ static int kgdb_mips_notify(struct notifier_block *self, unsigned long cmd,
 
        /* Kernel mode. Set correct address limit */
        old_fs = get_fs();
-       set_fs(get_ds());
+       set_fs(KERNEL_DS);
 
        if (atomic_read(&kgdb_active) != -1)
                kgdb_nmicallback(smp_processor_id(), regs);
index c91097f7b32f1d3a87dcb36a375c18d1ed8ff220..cbab46004e99d4f07c1eb9a10c16bba3b5cb992f 100644 (file)
@@ -1077,7 +1077,7 @@ asmlinkage void do_tr(struct pt_regs *regs)
 
        seg = get_fs();
        if (!user_mode(regs))
-               set_fs(get_ds());
+               set_fs(KERNEL_DS);
 
        prev_state = exception_enter();
        current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f;
index 53dcb49b0b12f5b8a85dd1858f71d3b4a0f23939..116598b47c4d2b7c19cce39ba9ad98d8c00e51fd 100644 (file)
@@ -37,7 +37,6 @@ extern int fixup_exception(struct pt_regs *regs);
 #define KERNEL_DS      ((mm_segment_t) { ~0UL })
 #define USER_DS                ((mm_segment_t) {TASK_SIZE - 1})
 
-#define get_ds()       (KERNEL_DS)
 #define get_fs()       (current_thread_info()->addr_limit)
 #define user_addr_max  get_fs
 
index ab7ab46234b1475c106d8adb9a79e9eff0de6f12..9712fd474f2ca3faa4b7dc6e66f5503b48ef59f8 100644 (file)
@@ -121,7 +121,7 @@ void show_regs(struct pt_regs *regs)
                regs->uregs[3], regs->uregs[2], regs->uregs[1], regs->uregs[0]);
        pr_info("  IRQs o%s  Segment %s\n",
                interrupts_enabled(regs) ? "n" : "ff",
-               segment_eq(get_fs(), get_ds())? "kernel" : "user");
+               segment_eq(get_fs(), KERNEL_DS)? "kernel" : "user");
 }
 
 EXPORT_SYMBOL(show_regs);
index e0ea10806491f47f8e9e7b21b8edd938881b1b5b..e83f831a76f93926e5ac5717b259d3b5777dae97 100644 (file)
@@ -26,7 +26,6 @@
 #define USER_DS                        MAKE_MM_SEG(0x80000000UL)
 #define KERNEL_DS              MAKE_MM_SEG(0)
 
-#define get_ds()               (KERNEL_DS)
 
 #define get_fs()               (current_thread_info()->addr_limit)
 #define set_fs(seg)            (current_thread_info()->addr_limit = (seg))
index a44682c8adc34efeeb794a9340d4962fdf50d622..45afd9ab78c1b5d4ff3c13a09433fd0028a12ab9 100644 (file)
@@ -42,7 +42,6 @@
  */
 
 #define KERNEL_DS      (~0UL)
-#define get_ds()       (KERNEL_DS)
 
 #define USER_DS                (TASK_SIZE)
 #define get_fs()       (current_thread_info()->addr_limit)
index 30ac2865ea730cdf650efd7ca993cfd6daa79d2e..ebbb9ffe038c76728de555ca8a3d2b0ec86020a2 100644 (file)
@@ -16,7 +16,6 @@
 
 #define segment_eq(a, b) ((a).seg == (b).seg)
 
-#define get_ds()       (KERNEL_DS)
 #define get_fs()       (current_thread_info()->addr_limit)
 #define set_fs(x)      (current_thread_info()->addr_limit = (x))
 
index e3a731793ea23f24bbe28981f7191ed48a14f715..4d6d905e913809ef018ecc57a1c31a2845fdfd7f 100644 (file)
@@ -28,7 +28,6 @@
 #define USER_DS                MAKE_MM_SEG(TASK_SIZE - 1)
 #endif
 
-#define get_ds()       (KERNEL_DS)
 #define get_fs()       (current->thread.addr_limit)
 
 static inline void set_fs(mm_segment_t fs)
index 637b896894fc4380ad19e8f96fa0d76e35da7b69..a00168b980d2e6ca265ae0424045508275fbbe3f 100644 (file)
@@ -41,7 +41,6 @@
 #define KERNEL_DS      (~0UL)
 #define USER_DS                (TASK_SIZE)
 
-#define get_ds()       (KERNEL_DS)
 #define get_fs()       (current_thread_info()->addr_limit)
 
 static inline void set_fs(mm_segment_t fs)
index bd2545977ad35f33ee8c2f3fa63466e52a97a59b..007fcb9aeeb83eb99d00a0ea116236f8213e9db1 100644 (file)
@@ -31,7 +31,6 @@
 #define USER_DS                (2)
 #define USER_DS_SACF   (3)
 
-#define get_ds()        (KERNEL_DS)
 #define get_fs()        (current->thread.mm_segment)
 #define segment_eq(a,b) (((a) & 2) == ((b) & 2))
 
index 101c13c0c6adc0688380097e4c41837c41937903..33d1d28057cbfb37aa25896a88cbfa98596b09b9 100644 (file)
@@ -26,7 +26,6 @@ typedef struct {
 
 #define segment_eq(a, b) ((a).seg == (b).seg)
 
-#define get_ds()       (KERNEL_DS)
 
 #define get_fs()       (current_thread_info()->addr_limit)
 #define set_fs(x)      (current_thread_info()->addr_limit = (x))
index 5153798051fb2f0a3a529ec62e8f8fe9b7b7ff2e..d6d8413eca835aa325a892ad45ce792b9fedf014 100644 (file)
@@ -25,7 +25,6 @@
 #define KERNEL_DS   ((mm_segment_t) { 0 })
 #define USER_DS     ((mm_segment_t) { -1 })
 
-#define get_ds()       (KERNEL_DS)
 #define get_fs()       (current->thread.current_ds)
 #define set_fs(val)    ((current->thread.current_ds) = (val))
 
index 87ae9ffb1521b199ea57b477c4fc8fb789bf3dc3..bf9d330073b2352d571dde9093b60fd75ea06bea 100644 (file)
@@ -31,7 +31,6 @@
 #define USER_DS     ((mm_segment_t) { ASI_AIUS })      /* har har har */
 
 #define get_fs() ((mm_segment_t){(current_thread_info()->current_ds)})
-#define get_ds() (KERNEL_DS)
 
 #define segment_eq(a, b)  ((a).seg == (b).seg)
 
index c1334aaaa78d32dbab9a38b45deb51d3b1487576..5e49a0acb5eeb194fa892baebf01f4c0bfbfc531 100644 (file)
@@ -25,7 +25,6 @@
 #define KERNEL_DS      MAKE_MM_SEG(-1UL)
 #define USER_DS        MAKE_MM_SEG(TASK_SIZE_MAX)
 
-#define get_ds()       (KERNEL_DS)
 #define get_fs()       (current->thread.addr_limit)
 static inline void set_fs(mm_segment_t fs)
 {
index dfdf9fae1f84bc9f971b1caf861cfdbeb07a08b6..7f6cf4151843abea3b591e5536762f155a7cb5ff 100644 (file)
@@ -32,8 +32,6 @@
 #define KERNEL_DS      0
 #define USER_DS                1
 
-#define get_ds         (KERNEL_DS)
-
 /*
  * get_fs reads current->thread.current_ds into a register.
  * On Entry:
index 4b2480304bc311ffd8c1769efa885a2b78e65357..6792928ba84a7bb16d20a661f5070d0676e2f6b6 100644 (file)
@@ -32,7 +32,6 @@
 #define KERNEL_DS      ((mm_segment_t) { 0 })
 #define USER_DS                ((mm_segment_t) { 1 })
 
-#define get_ds()       (KERNEL_DS)
 #define get_fs()       (current->thread.current_ds)
 #define set_fs(val)    (current->thread.current_ds = (val))
 
index e14d7cc411c9ff23e05767d0a0556f79c894a3ef..73b87da15eb29a7d0715a14c6a9286c51c69c2d2 100644 (file)
@@ -137,7 +137,7 @@ static int isFileReadable(char *path)
                ret = PTR_ERR(fp);
        }
        else {
-               oldfs = get_fs(); set_fs(get_ds());
+               oldfs = get_fs(); set_fs(KERNEL_DS);
 
                if (1!=readFile(fp, &buf, 1))
                        ret = -EINVAL;
@@ -165,7 +165,7 @@ static int retriveFromFile(char *path, u8 *buf, u32 sz)
                if (0 == (ret =openFile(&fp, path, O_RDONLY, 0))) {
                        DBG_871X("%s openFile path:%s fp =%p\n", __func__, path , fp);
 
-                       oldfs = get_fs(); set_fs(get_ds());
+                       oldfs = get_fs(); set_fs(KERNEL_DS);
                        ret =readFile(fp, buf, sz);
                        set_fs(oldfs);
                        closeFile(fp);
index ff3c5e6f87cfaa7c84064161c08d1b76de314505..30df848b7451468649d86ed9080b99df9fbf99cb 100644 (file)
@@ -426,7 +426,7 @@ ssize_t kernel_read(struct file *file, void *buf, size_t count, loff_t *pos)
        ssize_t result;
 
        old_fs = get_fs();
-       set_fs(get_ds());
+       set_fs(KERNEL_DS);
        /* The cast to a user pointer is valid due to the set_fs() */
        result = vfs_read(file, (void __user *)buf, count, pos);
        set_fs(old_fs);
@@ -499,7 +499,7 @@ ssize_t __kernel_write(struct file *file, const void *buf, size_t count, loff_t
                return -EINVAL;
 
        old_fs = get_fs();
-       set_fs(get_ds());
+       set_fs(KERNEL_DS);
        p = (__force const char __user *)buf;
        if (count > MAX_RW_COUNT)
                count =  MAX_RW_COUNT;
@@ -521,7 +521,7 @@ ssize_t kernel_write(struct file *file, const void *buf, size_t count,
        ssize_t res;
 
        old_fs = get_fs();
-       set_fs(get_ds());
+       set_fs(KERNEL_DS);
        /* The cast to a user pointer is valid due to the set_fs() */
        res = vfs_write(file, (__force const char __user *)buf, count, pos);
        set_fs(old_fs);
index de2ede048473cef81bec9161cf1842b70835ea63..ec8b54b5c0d28f52695ffbd829a5c267cae6fc90 100644 (file)
@@ -357,7 +357,7 @@ static ssize_t kernel_readv(struct file *file, const struct kvec *vec,
        ssize_t res;
 
        old_fs = get_fs();
-       set_fs(get_ds());
+       set_fs(KERNEL_DS);
        /* The cast to a user pointer is valid due to the set_fs() */
        res = vfs_readv(file, (const struct iovec __user *)vec, vlen, &pos, 0);
        set_fs(old_fs);
index d82c78a79da59027914b51513f7b5a3a9f1ce17b..b3d2241e03f81c5d11d8bfb9bacb8f2e6676292f 100644 (file)
@@ -22,7 +22,6 @@
 #endif
 
 #ifndef get_fs
-#define get_ds()       (KERNEL_DS)
 #define get_fs()       (current_thread_info()->addr_limit)
 
 static inline void set_fs(mm_segment_t fs)
index 88f04b3380d4a8ce94d32fad23b7e86788d9357b..423876fca8b46f780c5751a22f14fee8a64404d0 100644 (file)
@@ -200,7 +200,7 @@ int integrity_kernel_read(struct file *file, loff_t offset,
                return -EBADF;
 
        old_fs = get_fs();
-       set_fs(get_ds());
+       set_fs(KERNEL_DS);
        ret = __vfs_read(file, buf, count, &offset);
        set_fs(old_fs);