Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 475a4b81 authored by Namhyung Kim's avatar Namhyung Kim Committed by Linus Torvalds
Browse files

ptrace: cleanup arch_ptrace() on cris



Use new 'regno' variable in order to remove redandunt expression and
remove checking @addr less than 0 because @addr is now unsigned.  Also
update 'datap' on PTRACE_GET/SETREGS to fix a bug on arch-v10.

Signed-off-by: default avatarNamhyung Kim <namhyung@gmail.com>
Acked-by: default avatarMikael Starvik <starvik@axis.com>
Cc: Jesper Nilsson <jesper.nilsson@axis.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent aeebd3a3
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ long arch_ptrace(struct task_struct *child, long request,
		 unsigned long addr, unsigned long data)
{
	int ret;
	unsigned int regno = addr >> 2;
	unsigned long __user *datap = (unsigned long __user *)data;

	switch (request) {
@@ -94,10 +95,10 @@ long arch_ptrace(struct task_struct *child, long request,
			unsigned long tmp;

			ret = -EIO;
			if ((addr & 3) || addr < 0 || addr > PT_MAX << 2)
			if ((addr & 3) || regno > PT_MAX)
				break;

			tmp = get_reg(child, addr >> 2);
			tmp = get_reg(child, regno);
			ret = put_user(tmp, datap);
			break;
		}
@@ -111,19 +112,17 @@ long arch_ptrace(struct task_struct *child, long request,
 		/* Write the word at location address in the USER area. */
		case PTRACE_POKEUSR:
			ret = -EIO;
			if ((addr & 3) || addr < 0 || addr > PT_MAX << 2)
			if ((addr & 3) || regno > PT_MAX)
				break;

			addr >>= 2;

			if (addr == PT_DCCR) {
			if (regno == PT_DCCR) {
				/* don't allow the tracing process to change stuff like
				 * interrupt enable, kernel/user bit, dma enables etc.
				 */
				data &= DCCR_MASK;
				data |= get_reg(child, PT_DCCR) & ~DCCR_MASK;
			}
			if (put_reg(child, addr, data))
			if (put_reg(child, regno, data))
				break;
			ret = 0;
			break;
@@ -142,7 +141,7 @@ long arch_ptrace(struct task_struct *child, long request,
					break;
				}
				
				data += sizeof(unsigned long);
				datap++;
			}

			break;
@@ -166,7 +165,7 @@ long arch_ptrace(struct task_struct *child, long request,
				}
				
				put_reg(child, i, tmp);
				data += sizeof(unsigned long);
				datap++;
			}
			
			break;
+6 −7
Original line number Diff line number Diff line
@@ -130,6 +130,7 @@ long arch_ptrace(struct task_struct *child, long request,
		 unsigned long addr, unsigned long data)
{
	int ret;
	unsigned int regno = addr >> 2;
	unsigned long __user *datap = (unsigned long __user *)data;

	switch (request) {
@@ -164,10 +165,10 @@ long arch_ptrace(struct task_struct *child, long request,
			unsigned long tmp;

			ret = -EIO;
			if ((addr & 3) || addr < 0 || addr > PT_MAX << 2)
			if ((addr & 3) || regno > PT_MAX)
				break;

			tmp = get_reg(child, addr >> 2);
			tmp = get_reg(child, regno);
			ret = put_user(tmp, datap);
			break;
		}
@@ -181,19 +182,17 @@ long arch_ptrace(struct task_struct *child, long request,
		/* Write the word at location address in the USER area. */
		case PTRACE_POKEUSR:
			ret = -EIO;
			if ((addr & 3) || addr < 0 || addr > PT_MAX << 2)
			if ((addr & 3) || regno > PT_MAX)
				break;

			addr >>= 2;

			if (addr == PT_CCS) {
			if (regno == PT_CCS) {
				/* don't allow the tracing process to change stuff like
				 * interrupt enable, kernel/user bit, dma enables etc.
				 */
				data &= CCS_MASK;
				data |= get_reg(child, PT_CCS) & ~CCS_MASK;
			}
			if (put_reg(child, addr, data))
			if (put_reg(child, regno, data))
				break;
			ret = 0;
			break;