[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: non-working coreutils and findutils in arm chroot, running armel kernel



On Thu, Mar 27, 2008 at 09:08:58PM +0200, Riku Voipio wrote:
> Now after a quick relook, I think the issue is fstatat64. both find and
> rm call it, but arch/arm/kernel/sys_oabi-compat.c doesn't have a shim
> to convert the stat64 struct oldabi <-> eabi for this function.
> Fix is probably trivial, if we want to continue to support the oldabi
> emulation layer.

And here is probably the fix. For added excitement, apart from
compiling, it's completely untested. It will take until weekend
until I can test it..

-- 
"rm -rf" only sounds scary if you don't have backups
From 15c4a48e1d6c2249dece6b327e0ff2b0f3b720d4 Mon Sep 17 00:00:00 2001
From: Riku Voipio <riku.voipio@movial.fi>
Date: Thu, 27 Mar 2008 21:51:27 +0200
Subject: [PATCH] Add oabi shim for fstatat64

fixes bugs.debian.org/462677

Signed-off-by: Riku Voipio <riku.voipio@movial.fi>
---
 arch/arm/kernel/calls.S           |    2 +-
 arch/arm/kernel/sys_oabi-compat.c |   24 ++++++++++++++++++++++++
 2 files changed, 25 insertions(+), 1 deletions(-)

diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S
index 283e14f..7e97b73 100644
--- a/arch/arm/kernel/calls.S
+++ b/arch/arm/kernel/calls.S
@@ -336,7 +336,7 @@
 		CALL(sys_mknodat)
 /* 325 */	CALL(sys_fchownat)
 		CALL(sys_futimesat)
-		CALL(sys_fstatat64)
+		CALL(ABI(sys_fstatat64,  sys_oabi_fstatat64))
 		CALL(sys_unlinkat)
 		CALL(sys_renameat)
 /* 330 */	CALL(sys_linkat)
diff --git a/arch/arm/kernel/sys_oabi-compat.c b/arch/arm/kernel/sys_oabi-compat.c
index e8b9804..96ab5f5 100644
--- a/arch/arm/kernel/sys_oabi-compat.c
+++ b/arch/arm/kernel/sys_oabi-compat.c
@@ -25,6 +25,7 @@
  * sys_stat64:
  * sys_lstat64:
  * sys_fstat64:
+ * sys_fstatat64:
  *
  *   struct stat64 has different sizes and some members are shifted
  *   Compatibility wrappers are needed for them and provided below.
@@ -169,6 +170,29 @@ asmlinkage long sys_oabi_fstat64(unsigned long fd,
 	return error;
 }
 
+asmlinkage long sys_oabi_fstatat64(int dfd,
+				   char __user *filename,
+				   struct oldabi_stat64  __user *statbuf,
+				   int flag)
+{
+	struct kstat stat;
+	int error = -EINVAL;
+
+	if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0)
+		goto out;
+
+	if (flag & AT_SYMLINK_NOFOLLOW)
+		error = vfs_lstat_fd(dfd, filename, &stat);
+	else
+		error = vfs_stat_fd(dfd, filename, &stat);
+
+	if (!error)
+	error = cp_oldabi_stat64(&stat, statbuf);
+
+out:
+	return error;
+}
+
 struct oabi_flock64 {
 	short	l_type;
 	short	l_whence;
-- 
1.5.4.3

Attachment: signature.asc
Description: Digital signature


Reply to: