From 75a8032af4c309a1cc3fd6a7ed7710dbb91d8384 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Thu, 25 Mar 2004 23:00:55 -0800 Subject: [PATCH] [SPARC64]: Fix lvalue casting in sys_sparc32.c --- arch/sparc64/kernel/sys_sparc32.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c index 23d3651d3b589..3c3e515f65942 100644 --- a/arch/sparc64/kernel/sys_sparc32.c +++ b/arch/sparc64/kernel/sys_sparc32.c @@ -1104,7 +1104,7 @@ static int filldir(void * __buf, const char * name, int namlen, loff_t offset, i copy_to_user(dirent->d_name, name, namlen); put_user(0, dirent->d_name + namlen); put_user(d_type, (char *) dirent + reclen - 1); - ((char *) dirent) += reclen; + dirent = (void *) dirent + reclen; buf->current_dir = dirent; buf->count -= reclen; return 0; @@ -1781,9 +1781,12 @@ asmlinkage int sys32_sigaction (int sig, struct old_sigaction32 *act, struct old if (act) { compat_old_sigset_t mask; + u32 u_handler, u_restorer; - ret = get_user((long)new_ka.sa.sa_handler, &act->sa_handler); - ret |= __get_user((long)new_ka.sa.sa_restorer, &act->sa_restorer); + ret = get_user(u_handler, &act->sa_handler); + new_ka.sa.sa_handler = (void *) (long) u_handler; + ret |= __get_user(u_restorer, &act->sa_restorer); + new_ka.sa.sa_restorer = (void *) (long) u_restorer; ret |= __get_user(new_ka.sa.sa_flags, &act->sa_flags); ret |= __get_user(mask, &act->sa_mask); if (ret) @@ -1822,8 +1825,11 @@ sys32_rt_sigaction(int sig, struct sigaction32 *act, struct sigaction32 *oact, set_thread_flag(TIF_NEWSIGNALS); if (act) { + u32 u_handler, u_restorer; + new_ka.ka_restorer = restorer; - ret = get_user((long)new_ka.sa.sa_handler, &act->sa_handler); + ret = get_user(u_handler, &act->sa_handler); + new_ka.sa.sa_handler = (void *) (long) u_handler; ret |= __copy_from_user(&set32, &act->sa_mask, sizeof(compat_sigset_t)); switch (_NSIG_WORDS) { case 4: new_ka.sa.sa_mask.sig[3] = set32.sig[6] | (((long)set32.sig[7]) << 32); @@ -1832,7 +1838,8 @@ sys32_rt_sigaction(int sig, struct sigaction32 *act, struct sigaction32 *oact, case 1: new_ka.sa.sa_mask.sig[0] = set32.sig[0] | (((long)set32.sig[1]) << 32); } ret |= __get_user(new_ka.sa.sa_flags, &act->sa_flags); - ret |= __get_user((long)new_ka.sa.sa_restorer, &act->sa_restorer); + ret |= __get_user(u_restorer, &act->sa_restorer); + new_ka.sa.sa_restorer = (void *) (long) u_restorer; if (ret) return -EFAULT; } -- 2.53.0