create core package
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
From 6c373810f5b1d32824371e9dff6ee5a006388f98 Mon Sep 17 00:00:00 2001
|
||||
From: Karel Zak <kzak@redhat.com>
|
||||
Date: Thu, 20 Feb 2014 16:59:11 +0100
|
||||
Subject: [PATCH] libmount: FS id and parent ID could be zero
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It seems that linux 3.14 is able to produce things like:
|
||||
|
||||
19 0 8:3 / / rw,relatime - ext4 /dev/sda3 rw,data=ordered
|
||||
^
|
||||
|
||||
Reported-by: Mantas Mikulėnas <grawity@gmail.com>
|
||||
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||
---
|
||||
libmount/src/tab.c | 12 ++++--------
|
||||
misc-utils/findmnt.c | 5 +++--
|
||||
2 files changed, 7 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/libmount/src/tab.c b/libmount/src/tab.c
|
||||
index 4c2f8a4..332312b 100644
|
||||
--- a/libmount/src/tab.c
|
||||
+++ b/libmount/src/tab.c
|
||||
@@ -505,7 +505,7 @@ int mnt_table_get_root_fs(struct libmnt_table *tb, struct libmnt_fs **root)
|
||||
assert(tb);
|
||||
assert(root);
|
||||
|
||||
- if (!tb || !root)
|
||||
+ if (!tb || !root || !is_mountinfo(tb))
|
||||
return -EINVAL;
|
||||
|
||||
DBG(TAB, mnt_debug_h(tb, "lookup root fs"));
|
||||
@@ -515,8 +515,6 @@ int mnt_table_get_root_fs(struct libmnt_table *tb, struct libmnt_fs **root)
|
||||
mnt_reset_iter(&itr, MNT_ITER_FORWARD);
|
||||
while(mnt_table_next_fs(tb, &itr, &fs) == 0) {
|
||||
int id = mnt_fs_get_parent_id(fs);
|
||||
- if (!id)
|
||||
- break; /* @tab is not a mountinfo file? */
|
||||
|
||||
if (!*root || id < root_id) {
|
||||
*root = fs;
|
||||
@@ -524,7 +522,7 @@ int mnt_table_get_root_fs(struct libmnt_table *tb, struct libmnt_fs **root)
|
||||
}
|
||||
}
|
||||
|
||||
- return root_id ? 0 : -EINVAL;
|
||||
+ return *root ? 0 : -EINVAL;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -545,15 +543,13 @@ int mnt_table_next_child_fs(struct libmnt_table *tb, struct libmnt_iter *itr,
|
||||
struct libmnt_fs *fs;
|
||||
int parent_id, lastchld_id = 0, chld_id = 0;
|
||||
|
||||
- if (!tb || !itr || !parent)
|
||||
+ if (!tb || !itr || !parent || !is_mountinfo(tb))
|
||||
return -EINVAL;
|
||||
|
||||
DBG(TAB, mnt_debug_h(tb, "lookup next child of '%s'",
|
||||
mnt_fs_get_target(parent)));
|
||||
|
||||
parent_id = mnt_fs_get_id(parent);
|
||||
- if (!parent_id)
|
||||
- return -EINVAL;
|
||||
|
||||
/* get ID of the previously returned child */
|
||||
if (itr->head && itr->p != itr->head) {
|
||||
@@ -584,7 +580,7 @@ int mnt_table_next_child_fs(struct libmnt_table *tb, struct libmnt_iter *itr,
|
||||
}
|
||||
}
|
||||
|
||||
- if (!chld_id)
|
||||
+ if (!*chld)
|
||||
return 1; /* end of iterator */
|
||||
|
||||
/* set the iterator to the @chld for the next call */
|
||||
diff --git a/misc-utils/findmnt.c b/misc-utils/findmnt.c
|
||||
index fb21174..988cd73 100644
|
||||
--- a/misc-utils/findmnt.c
|
||||
+++ b/misc-utils/findmnt.c
|
||||
@@ -822,8 +822,9 @@ static int tab_is_tree(struct libmnt_table *tb)
|
||||
if (!itr)
|
||||
return 0;
|
||||
|
||||
- if (mnt_table_next_fs(tb, itr, &fs) == 0)
|
||||
- rc = mnt_fs_get_id(fs) > 0 && mnt_fs_get_parent_id(fs) > 0;
|
||||
+ rc = (mnt_table_next_fs(tb, itr, &fs) == 0 &&
|
||||
+ mnt_fs_is_kernel(fs) &&
|
||||
+ mnt_fs_get_root(fs));
|
||||
|
||||
mnt_free_iter(itr);
|
||||
return rc;
|
||||
--
|
||||
1.9.1
|
||||
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
From 751c39383adaf5ff5a860516238d524b0e20f835 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Reisner <dreisner@archlinux.org>
|
||||
Date: Wed, 2 Apr 2014 10:41:30 -0400
|
||||
Subject: [PATCH] switch_root: verify initramfs by f_type, not devno
|
||||
|
||||
As of linux 3.14, the initramfs device will have both major and
|
||||
minor 0, causing our paranoia check to fail. Make this version agnostic
|
||||
by checking the filesystem type, rather than a device number.
|
||||
|
||||
[adopted from master for backport into 2.24.x branch]
|
||||
|
||||
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
|
||||
---
|
||||
sys-utils/switch_root.c | 15 +++++++++------
|
||||
1 file changed, 9 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/sys-utils/switch_root.c b/sys-utils/switch_root.c
|
||||
index f26f7da..40e222d 100644
|
||||
--- a/sys-utils/switch_root.c
|
||||
+++ b/sys-utils/switch_root.c
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <sys/mount.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
+#include <sys/statfs.h>
|
||||
#include <sys/param.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
@@ -33,6 +34,8 @@
|
||||
#include <ctype.h>
|
||||
#include <dirent.h>
|
||||
|
||||
+#include <linux/magic.h>
|
||||
+
|
||||
#include "c.h"
|
||||
#include "nls.h"
|
||||
#include "closestream.h"
|
||||
@@ -174,12 +177,12 @@ static int switchroot(const char *newroot)
|
||||
if (cfd >= 0) {
|
||||
pid = fork();
|
||||
if (pid <= 0) {
|
||||
- if (fstat(cfd, &sb) == 0) {
|
||||
- if (sb.st_dev == makedev(0, 1))
|
||||
- recursiveRemove(cfd);
|
||||
- else
|
||||
- warn(_("old root filesystem is not an initramfs"));
|
||||
- }
|
||||
+ struct statfs stfs;
|
||||
+ if (fstatfs(cfd, &stfs) == 0 &&
|
||||
+ (stfs.f_type == RAMFS_MAGIC || stfs.f_type == TMPFS_MAGIC))
|
||||
+ recursiveRemove(cfd);
|
||||
+ else
|
||||
+ warn(_("old root filesystem is not an initramfs"));
|
||||
|
||||
if (pid == 0)
|
||||
exit(EXIT_SUCCESS);
|
||||
--
|
||||
1.9.1
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
diff --git a/libmount/src/tab.c b/libmount/src/tab.c
|
||||
index 3633b6a..8ae49c8 100644
|
||||
--- a/libmount/src/tab.c
|
||||
+++ b/libmount/src/tab.c
|
||||
@@ -47,6 +47,20 @@
|
||||
#include "strutils.h"
|
||||
#include "loopdev.h"
|
||||
|
||||
+static int is_mountinfo(struct libmnt_table *tb)
|
||||
+{
|
||||
+ struct libmnt_fs *fs;
|
||||
+
|
||||
+ if (!tb)
|
||||
+ return 0;
|
||||
+
|
||||
+ fs = list_first_entry(&tb->ents, struct libmnt_fs, ents);
|
||||
+ if (fs && mnt_fs_is_kernel(fs) && mnt_fs_get_root(fs))
|
||||
+ return 1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* mnt_new_table:
|
||||
*
|
||||
@@ -1229,20 +1335,6 @@ err:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
-static int is_mountinfo(struct libmnt_table *tb)
|
||||
-{
|
||||
- struct libmnt_fs *fs;
|
||||
-
|
||||
- if (!tb)
|
||||
- return 0;
|
||||
-
|
||||
- fs = list_first_entry(&tb->ents, struct libmnt_fs, ents);
|
||||
- if (fs && mnt_fs_is_kernel(fs) && mnt_fs_get_root(fs))
|
||||
- return 1;
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
/**
|
||||
* mnt_table_is_fs__mounted:
|
||||
* @tb: /proc/self/mountinfo file
|
||||
@@ -0,0 +1,12 @@
|
||||
diff -Nuar util-linux-2.21.2.orig/libblkid/src/superblocks/ntfs.c util-linux-2.21.2/libblkid/src/superblocks/ntfs.c
|
||||
--- util-linux-2.21.2.orig/libblkid/src/superblocks/ntfs.c 2012-05-24 13:22:56.000000000 +0300
|
||||
+++ util-linux-2.21.2/libblkid/src/superblocks/ntfs.c 2012-06-05 14:21:57.967967774 +0300
|
||||
@@ -160,7 +160,7 @@
|
||||
|
||||
const struct blkid_idinfo ntfs_idinfo =
|
||||
{
|
||||
- .name = "ntfs",
|
||||
+ .name = "ntfs-3g",
|
||||
.usage = BLKID_USAGE_FILESYSTEM,
|
||||
.probefunc = probe_ntfs,
|
||||
.magics =
|
||||
@@ -0,0 +1,11 @@
|
||||
diff -up util-linux-2.21-rc1/login-utils/login.c.kzak util-linux-2.21-rc1/login-utils/login.c
|
||||
--- util-linux-2.21-rc1/login-utils/login.c.kzak 2012-01-19 13:19:54.886299587 +0100
|
||||
+++ util-linux-2.21-rc1/login-utils/login.c 2012-01-19 13:20:40.853451212 +0100
|
||||
@@ -499,7 +499,7 @@ static void log_lastlog(struct login_con
|
||||
if (!cxt->pwd)
|
||||
return;
|
||||
|
||||
- fd = open(_PATH_LASTLOG, O_RDWR, 0);
|
||||
+ fd = open(_PATH_LASTLOG, O_RDWR | O_CREAT, 0);
|
||||
if (fd < 0)
|
||||
return;
|
||||
Reference in New Issue
Block a user