Dmitry V. Levin
cc6622730b
syscall.h: introduce syscall_set_nr()
...
Similar to syscall_set_arguments() that complements
syscall_get_arguments(), introduce syscall_set_nr() that complements
syscall_get_nr().
syscall_set_nr() is going to be needed along with syscall_set_arguments()
on all HAVE_ARCH_TRACEHOOK architectures to implement
PTRACE_SET_SYSCALL_INFO API.
Link: https://lkml.kernel.org/r/20250303112020.GD24170@strace.io
Signed-off-by: Dmitry V. Levin <ldv@strace.io >
Tested-by: Charlie Jenkins <charlie@rivosinc.com >
Reviewed-by: Charlie Jenkins <charlie@rivosinc.com >
Acked-by: Helge Deller <deller@gmx.de > # parisc
Reviewed-by: Maciej W. Rozycki <macro@orcam.me.uk > # mips
Cc: Alexander Gordeev <agordeev@linux.ibm.com >
Cc: Alexey Gladkov (Intel) <legion@kernel.org >
Cc: Andreas Larsson <andreas@gaisler.com >
Cc: anton ivanov <anton.ivanov@cambridgegreys.com >
Cc: Arnd Bergmann <arnd@arndb.de >
Cc: Borislav Betkov <bp@alien8.de >
Cc: Brian Cain <bcain@quicinc.com >
Cc: Christian Borntraeger <borntraeger@linux.ibm.com >
Cc: Christian Zankel <chris@zankel.net >
Cc: Christophe Leroy <christophe.leroy@csgroup.eu >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Davide Berardi <berardi.dav@gmail.com >
Cc: David S. Miller <davem@davemloft.net >
Cc: Dinh Nguyen <dinguyen@kernel.org >
Cc: Eugene Syromiatnikov <esyr@redhat.com >
Cc: Eugene Syromyatnikov <evgsyr@gmail.com >
Cc: Geert Uytterhoeven <geert@linux-m68k.org >
Cc: Guo Ren <guoren@kernel.org >
Cc: Heiko Carstens <hca@linux.ibm.com >
Cc: "H. Peter Anvin" <hpa@zytor.com >
Cc: Huacai Chen <chenhuacai@kernel.org >
Cc: Ingo Molnar <mingo@redhat.com >
Cc: Johannes Berg <johannes@sipsolutions.net >
Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de >
Cc: Jonas Bonn <jonas@southpole.se >
Cc: Madhavan Srinivasan <maddy@linux.ibm.com >
Cc: Max Filippov <jcmvbkbc@gmail.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Michal Simek <monstr@monstr.eu >
Cc: Mike Frysinger <vapier@gentoo.org >
Cc: Naveen N Rao <naveen@kernel.org >
Cc: Nicholas Piggin <npiggin@gmail.com >
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Renzo Davoi <renzo@cs.unibo.it >
Cc: Richard Weinberger <richard@nod.at >
Cc: Rich Felker <dalias@libc.org >
Cc: Russel King <linux@armlinux.org.uk >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Stafford Horne <shorne@gmail.com >
Cc: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Thomas Gleinxer <tglx@linutronix.de >
Cc: Vasily Gorbik <gor@linux.ibm.com >
Cc: Vineet Gupta <vgupta@kernel.org >
Cc: WANG Xuerui <kernel@xen0n.name >
Cc: Will Deacon <will@kernel.org >
Cc: Yoshinori Sato <ysato@users.sourceforge.jp >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2025-05-11 17:48:15 -07:00
Dmitry V. Levin
17fc7b8f9b
syscall.h: add syscall_set_arguments()
...
This function is going to be needed on all HAVE_ARCH_TRACEHOOK
architectures to implement PTRACE_SET_SYSCALL_INFO API.
This partially reverts commit 7962c2eddb ("arch: remove unused function
syscall_set_arguments()") by reusing some of old syscall_set_arguments()
implementations.
[nathan@kernel.org: fix compile time fortify checks]
Link: https://lkml.kernel.org/r/20250408213131.GA2872426@ax162
Link: https://lkml.kernel.org/r/20250303112009.GC24170@strace.io
Signed-off-by: Dmitry V. Levin <ldv@strace.io >
Signed-off-by: Nathan Chancellor <nathan@kernel.org >
Tested-by: Charlie Jenkins <charlie@rivosinc.com >
Reviewed-by: Charlie Jenkins <charlie@rivosinc.com >
Acked-by: Helge Deller <deller@gmx.de > # parisc
Reviewed-by: Maciej W. Rozycki <macro@orcam.me.uk > [mips]
Cc: Alexander Gordeev <agordeev@linux.ibm.com >
Cc: Alexey Gladkov (Intel) <legion@kernel.org >
Cc: Andreas Larsson <andreas@gaisler.com >
Cc: anton ivanov <anton.ivanov@cambridgegreys.com >
Cc: Arnd Bergmann <arnd@arndb.de >
Cc: Borislav Betkov <bp@alien8.de >
Cc: Brian Cain <bcain@quicinc.com >
Cc: Christian Borntraeger <borntraeger@linux.ibm.com >
Cc: Christian Zankel <chris@zankel.net >
Cc: Christophe Leroy <christophe.leroy@csgroup.eu >
Cc: Dave Hansen <dave.hansen@linux.intel.com >
Cc: Davide Berardi <berardi.dav@gmail.com >
Cc: David S. Miller <davem@davemloft.net >
Cc: Dinh Nguyen <dinguyen@kernel.org >
Cc: Eugene Syromiatnikov <esyr@redhat.com >
Cc: Eugene Syromyatnikov <evgsyr@gmail.com >
Cc: Geert Uytterhoeven <geert@linux-m68k.org >
Cc: Guo Ren <guoren@kernel.org >
Cc: Heiko Carstens <hca@linux.ibm.com >
Cc: "H. Peter Anvin" <hpa@zytor.com >
Cc: Huacai Chen <chenhuacai@kernel.org >
Cc: Ingo Molnar <mingo@redhat.com >
Cc: Johannes Berg <johannes@sipsolutions.net >
Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de >
Cc: Jonas Bonn <jonas@southpole.se >
Cc: Madhavan Srinivasan <maddy@linux.ibm.com >
Cc: Max Filippov <jcmvbkbc@gmail.com >
Cc: Michael Ellerman <mpe@ellerman.id.au >
Cc: Michal Simek <monstr@monstr.eu >
Cc: Mike Frysinger <vapier@gentoo.org >
Cc: Naveen N Rao <naveen@kernel.org >
Cc: Nicholas Piggin <npiggin@gmail.com >
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Renzo Davoi <renzo@cs.unibo.it >
Cc: Richard Weinberger <richard@nod.at >
Cc: Rich Felker <dalias@libc.org >
Cc: Russel King <linux@armlinux.org.uk >
Cc: Shuah Khan <shuah@kernel.org >
Cc: Stafford Horne <shorne@gmail.com >
Cc: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi >
Cc: Sven Schnelle <svens@linux.ibm.com >
Cc: Thomas Gleinxer <tglx@linutronix.de >
Cc: Vasily Gorbik <gor@linux.ibm.com >
Cc: Vineet Gupta <vgupta@kernel.org >
Cc: WANG Xuerui <kernel@xen0n.name >
Cc: Will Deacon <will@kernel.org >
Cc: Yoshinori Sato <ysato@users.sourceforge.jp >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
2025-05-11 17:48:15 -07:00
Peter Collingbourne
7962c2eddb
arch: remove unused function syscall_set_arguments()
...
This function appears to have been unused since it was first introduced in
commit 828c365cc8 ("tracehook: asm/syscall.h").
Signed-off-by: Peter Collingbourne <pcc@google.com >
Link: https://linux-review.googlesource.com/id/I8ce04f002903a37c0b6c1d16e9b2a3afa716c097
Signed-off-by: Arnd Bergmann <arnd@arndb.de >
2021-09-14 16:06:20 +02:00
Max Filippov
9d9043f6a8
xtensa: clean up system_call/xtensa_rt_sigreturn interaction
...
system_call assembly code always pushes pointer to struct pt_regs as the
last additional parameter for all system calls. The only user of this
feature is xtensa_rt_sigreturn.
Avoid this special case. Define xtensa_rt_sigreturn as accepting no
argiments. Use current_pt_regs to get pointer to struct pt_regs in
xtensa_rt_sigreturn. Don't pass additional parameter from system_call
code.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com >
2019-11-29 19:37:12 -08:00
Max Filippov
c2d9aa3b6e
xtensa: fix syscall_set_return_value
...
syscall return value is in the register a2, not a0.
Cc: stable@vger.kernel.org # v5.0+
Fixes: 9f24f3c106 ("xtensa: implement tracehook functions and enable HAVE_ARCH_TRACEHOOK")
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com >
2019-11-26 12:01:45 -08:00
Linus Torvalds
02aff8db64
Merge tag 'audit-pr-20190507' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit
...
Pull audit updates from Paul Moore:
"We've got a reasonably broad set of audit patches for the v5.2 merge
window, the highlights are below:
- The biggest change, and the source of all the arch/* changes, is
the patchset from Dmitry to help enable some of the work he is
doing around PTRACE_GET_SYSCALL_INFO.
To be honest, including this in the audit tree is a bit of a
stretch, but it does help move audit a little further along towards
proper syscall auditing for all arches, and everyone else seemed to
agree that audit was a "good" spot for this to land (or maybe they
just didn't want to merge it? dunno.).
- We can now audit time/NTP adjustments.
- We continue the work to connect associated audit records into a
single event"
* tag 'audit-pr-20190507' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit: (21 commits)
audit: fix a memory leak bug
ntp: Audit NTP parameters adjustment
timekeeping: Audit clock adjustments
audit: purge unnecessary list_empty calls
audit: link integrity evm_write_xattrs record to syscall event
syscall_get_arch: add "struct task_struct *" argument
unicore32: define syscall_get_arch()
Move EM_UNICORE to uapi/linux/elf-em.h
nios2: define syscall_get_arch()
nds32: define syscall_get_arch()
Move EM_NDS32 to uapi/linux/elf-em.h
m68k: define syscall_get_arch()
hexagon: define syscall_get_arch()
Move EM_HEXAGON to uapi/linux/elf-em.h
h8300: define syscall_get_arch()
c6x: define syscall_get_arch()
arc: define syscall_get_arch()
Move EM_ARCOMPACT and EM_ARCV2 to uapi/linux/elf-em.h
audit: Make audit_log_cap and audit_copy_inode static
audit: connect LOGIN record to its syscall record
...
2019-05-07 19:06:04 -07:00
Steven Rostedt (VMware)
32d9258662
syscalls: Remove start and number from syscall_set_arguments() args
...
After removing the start and count arguments of syscall_get_arguments() it
seems reasonable to remove them from syscall_set_arguments(). Note, as of
today, there are no users of syscall_set_arguments(). But we are told that
there will be soon. But for now, at least make it consistent with
syscall_get_arguments().
Link: http://lkml.kernel.org/r/20190327222014.GA32540@altlinux.org
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Kees Cook <keescook@chromium.org >
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Dominik Brodowski <linux@dominikbrodowski.net >
Cc: Dave Martin <dave.martin@arm.com >
Cc: "Dmitry V. Levin" <ldv@altlinux.org >
Cc: x86@kernel.org
Cc: linux-snps-arc@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-c6x-dev@linux-c6x.org
Cc: uclinux-h8-devel@lists.sourceforge.jp
Cc: linux-hexagon@vger.kernel.org
Cc: linux-ia64@vger.kernel.org
Cc: linux-mips@vger.kernel.org
Cc: nios2-dev@lists.rocketboards.org
Cc: openrisc@lists.librecores.org
Cc: linux-parisc@vger.kernel.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-riscv@lists.infradead.org
Cc: linux-s390@vger.kernel.org
Cc: linux-sh@vger.kernel.org
Cc: sparclinux@vger.kernel.org
Cc: linux-um@lists.infradead.org
Cc: linux-xtensa@linux-xtensa.org
Cc: linux-arch@vger.kernel.org
Acked-by: Max Filippov <jcmvbkbc@gmail.com > # For xtensa changes
Acked-by: Will Deacon <will.deacon@arm.com > # For the arm64 bits
Reviewed-by: Thomas Gleixner <tglx@linutronix.de > # for x86
Reviewed-by: Dmitry V. Levin <ldv@altlinux.org >
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org >
2019-04-05 09:27:23 -04:00
Steven Rostedt (Red Hat)
b35f549df1
syscalls: Remove start and number from syscall_get_arguments() args
...
At Linux Plumbers, Andy Lutomirski approached me and pointed out that the
function call syscall_get_arguments() implemented in x86 was horribly
written and not optimized for the standard case of passing in 0 and 6 for
the starting index and the number of system calls to get. When looking at
all the users of this function, I discovered that all instances pass in only
0 and 6 for these arguments. Instead of having this function handle
different cases that are never used, simply rewrite it to return the first 6
arguments of a system call.
This should help out the performance of tracing system calls by ptrace,
ftrace and perf.
Link: http://lkml.kernel.org/r/20161107213233.754809394@goodmis.org
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Kees Cook <keescook@chromium.org >
Cc: Andy Lutomirski <luto@amacapital.net >
Cc: Dominik Brodowski <linux@dominikbrodowski.net >
Cc: Dave Martin <dave.martin@arm.com >
Cc: "Dmitry V. Levin" <ldv@altlinux.org >
Cc: x86@kernel.org
Cc: linux-snps-arc@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-c6x-dev@linux-c6x.org
Cc: uclinux-h8-devel@lists.sourceforge.jp
Cc: linux-hexagon@vger.kernel.org
Cc: linux-ia64@vger.kernel.org
Cc: linux-mips@vger.kernel.org
Cc: nios2-dev@lists.rocketboards.org
Cc: openrisc@lists.librecores.org
Cc: linux-parisc@vger.kernel.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-riscv@lists.infradead.org
Cc: linux-s390@vger.kernel.org
Cc: linux-sh@vger.kernel.org
Cc: sparclinux@vger.kernel.org
Cc: linux-um@lists.infradead.org
Cc: linux-xtensa@linux-xtensa.org
Cc: linux-arch@vger.kernel.org
Acked-by: Paul Burton <paul.burton@mips.com > # MIPS parts
Acked-by: Max Filippov <jcmvbkbc@gmail.com > # For xtensa changes
Acked-by: Will Deacon <will.deacon@arm.com > # For the arm64 bits
Reviewed-by: Thomas Gleixner <tglx@linutronix.de > # for x86
Reviewed-by: Dmitry V. Levin <ldv@altlinux.org >
Reported-by: Andy Lutomirski <luto@amacapital.net >
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org >
2019-04-05 09:26:43 -04:00
Dmitry V. Levin
16add41164
syscall_get_arch: add "struct task_struct *" argument
...
This argument is required to extend the generic ptrace API with
PTRACE_GET_SYSCALL_INFO request: syscall_get_arch() is going
to be called from ptrace_request() along with syscall_get_nr(),
syscall_get_arguments(), syscall_get_error(), and
syscall_get_return_value() functions with a tracee as their argument.
The primary intent is that the triple (audit_arch, syscall_nr, arg1..arg6)
should describe what system call is being called and what its arguments
are.
Reverts: 5e937a9ae9 ("syscall_get_arch: remove useless function arguments")
Reverts: 1002d94d30 ("syscall.h: fix doc text for syscall_get_arch()")
Reviewed-by: Andy Lutomirski <luto@kernel.org > # for x86
Reviewed-by: Palmer Dabbelt <palmer@sifive.com >
Acked-by: Paul Moore <paul@paul-moore.com >
Acked-by: Paul Burton <paul.burton@mips.com > # MIPS parts
Acked-by: Michael Ellerman <mpe@ellerman.id.au > (powerpc)
Acked-by: Kees Cook <keescook@chromium.org > # seccomp parts
Acked-by: Mark Salter <msalter@redhat.com > # for the c6x bit
Cc: Elvira Khabirova <lineprinter@altlinux.org >
Cc: Eugene Syromyatnikov <esyr@redhat.com >
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: x86@kernel.org
Cc: linux-alpha@vger.kernel.org
Cc: linux-snps-arc@lists.infradead.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-c6x-dev@linux-c6x.org
Cc: uclinux-h8-devel@lists.sourceforge.jp
Cc: linux-hexagon@vger.kernel.org
Cc: linux-ia64@vger.kernel.org
Cc: linux-m68k@lists.linux-m68k.org
Cc: linux-mips@vger.kernel.org
Cc: nios2-dev@lists.rocketboards.org
Cc: openrisc@lists.librecores.org
Cc: linux-parisc@vger.kernel.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-riscv@lists.infradead.org
Cc: linux-s390@vger.kernel.org
Cc: linux-sh@vger.kernel.org
Cc: sparclinux@vger.kernel.org
Cc: linux-um@lists.infradead.org
Cc: linux-xtensa@linux-xtensa.org
Cc: linux-arch@vger.kernel.org
Cc: linux-audit@redhat.com
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org >
Signed-off-by: Paul Moore <paul@paul-moore.com >
2019-03-20 21:12:36 -04:00
Max Filippov
af5395c214
xtensa: implement syscall tracepoints
...
Add TIF_SYSCALL_TRACEPOINT flag definition; add _TIF_SYSCALL_TRACEPOINT
to _TIF_WORK_MASK. Call trace_sys_enter from do_syscall_trace_enter and
trace_sys_exit from do_syscall_trace_leave when TIF_SYSCALL_TRACEPOINT
flag is set.
Add declaration of sys_call_table to arch/xtensa/include/asm/syscall.h
Add definition of NR_syscalls to arch/xtensa/include/asm/unistd.h
Select HAVE_SYSCALL_TRACEPOINTS.
This change allows tracing each syscall entry and exit through the
ftrace mechanism.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com >
2018-12-17 13:50:25 -08:00
Max Filippov
9f24f3c106
xtensa: implement tracehook functions and enable HAVE_ARCH_TRACEHOOK
...
Implement syscall_get_nr, syscall_rollback, syscall_get_error,
syscall_{get,set}_return_value and syscall_{get,set}_arguments.
Select HAVE_ARCH_TRACEHOOK as Xtensa now has all support for that.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com >
2018-12-17 13:50:22 -08:00
Dmitry V. Levin
98c3115a4e
xtensa: define syscall_get_arch()
...
syscall_get_arch() is required to be implemented on all architectures
in order to extend the generic ptrace API with PTRACE_GET_SYSCALL_INFO
request.
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org >
Acked-by: Max Filippov <jcmvbkbc@gmail.com >
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com >
2018-12-17 13:47:25 -08:00
Max Filippov
58b17c55b6
xtensa: clean up syscall.h
...
Drop non-existent/unneeded function declarations, add header guard.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com >
2018-12-03 01:39:23 -08:00
Al Viro
0430f2f276
xtensa: switch to generic sigaltstack
...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk >
2013-02-03 18:16:27 -05:00
Al Viro
0aa0203fb4
take sys_rt_sigsuspend() prototype to linux/syscalls.h
...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk >
2013-02-03 18:14:23 -05:00
Al Viro
eaca6eae3e
sanitize rt_sigaction() situation a bit
...
Switch from __ARCH_WANT_SYS_RT_SIGACTION to opposite
(!CONFIG_ODD_RT_SIGACTION); the only two architectures that
need it are alpha and sparc. The reason for use of CONFIG_...
instead of __ARCH_... is that it's needed only kernel-side
and doing it that way avoids a mess with include order on many
architectures.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk >
2013-02-03 15:09:18 -05:00
Chris Zankel
c4c4594b00
xtensa: clean up files to make them code-style compliant
...
Remove heading and trailing spaces, trim trailing lines, and wrap lines
that are longer than 80 characters.
Signed-off-by: Chris Zankel <chris@zankel.net >
2012-12-18 21:10:25 -08:00
Al Viro
3e41f9ba61
xtensa: switch to generic clone()
...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk >
2012-11-28 23:43:41 -05:00
Al Viro
6b94631f9e
consolidate sys_execve() prototype
...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk >
2012-11-28 21:53:35 -05:00
Max Filippov
dc241f2c17
xtensa: switch to generic sys_execve()
...
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com >
Signed-off-by: Chris Zankel <chris@zankel.net >
2012-10-25 15:00:44 -07:00
Al Viro
03240b279d
fixups for signal breakage
...
Obvious brainos spotted by Geert.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk >
2012-06-04 17:47:34 -04:00
Al Viro
b1175ed223
xtensa: xtensa_sigaction doesn't exist
...
... and struct old_sigaction never used
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk >
2012-05-21 23:59:20 -04:00
Al Viro
9ccc9c75c9
xtensa: switch to generic rt_sigsuspend(2)
...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk >
2012-05-21 23:58:06 -04:00
Al Viro
853b3da10d
sanitize do_pipe_flags() callers in arch
...
* hpux_pipe() - no need to take BKL
* sys32_pipe() in arch/x86/ia32 and xtensa_pipe() in arch/xtensa -
no need at all, since both functions are open-coded sys_pipe()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk >
2009-12-16 12:16:40 -05:00
Al Viro
f8b7256096
Unify sys_mmap*
...
New helper - sys_mmap_pgoff(); switch syscalls to using it.
Acked-by: David S. Miller <davem@davemloft.net >
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk >
2009-12-11 06:44:29 -05:00
Chris Zankel
367b8112fe
xtensa: move headers files to arch/xtensa/include
...
Move all header files for xtensa to arch/xtensa/include and platform and
variant header files to the appropriate arch/xtensa/platforms/ and
arch/xtensa/variants/ directories.
Moving the files gets also rid of all uses of symlinks in the Makefile.
This has been completed already for the majority of the architectures
and xtensa is one out of six missing.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org >
Signed-off-by: Chris Zankel <chris@zankel.net >
2008-11-06 10:25:09 -08:00