lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 28 May 2012 23:19:19 -0600
From:	Andreas Dilger <adilger@...mcloud.com>
To:	tytso@....edu, linux-ext4@...r.kernel.org
Cc:	Andreas Dilger <adilger@...mcloud.com>
Subject: [PATCH 1/2] e2fsck,blkid,quota: quiet gcc -Wall build warnings

Quiet a number of minor, but mostly valid, compiler warnings.

For uninitialized variables, these could be fixed in a number
of different ways, but I chose mostly to leave them uninitialized
and fix the codepaths that result in this warning, to avoid hiding
potential errors in the future that incorrectly use this value.

A number of other miscellaneous compiler warnings were also fixed
in libquota, such as incorrect format strings.

Signed-off-by: Andreas Dilger <adilger@...mcloud.com>
---
 e2fsck/message.c         |   13 +++++++------
 e2fsck/sigcatcher.c      |   10 +++++++---
 e2fsck/unix.c            |    3 ++-
 e2fsck/util.c            |    1 -
 lib/blkid/probe.c        |    4 ++--
 lib/blkid/probe.h        |    2 +-
 lib/ext2fs/dblist.c      |    5 ++---
 lib/ext2fs/qcow2.c       |    2 +-
 lib/ext2fs/rw_bitmaps.c  |    1 -
 lib/quota/common.h       |    4 ++--
 lib/quota/mkquota.c      |   35 +++++++++++++++++++----------------
 lib/quota/quotaio.c      |   15 ++++++---------
 lib/quota/quotaio_tree.c |    6 +++---
 lib/quota/quotaio_v2.c   |    5 ++---
 resize/resize2fs.c       |   16 ++++++++++------
 15 files changed, 64 insertions(+), 58 deletions(-)

diff --git a/e2fsck/message.c b/e2fsck/message.c
index 980dc4b..0812a65 100644
--- a/e2fsck/message.c
+++ b/e2fsck/message.c
@@ -205,14 +205,15 @@ static void print_pathname(FILE *f, ext2_filsys fs, ext2_ino_t dir,
 		return;
 	}
 
-	if (fs)
+	if (fs) {
 		retval = ext2fs_get_pathname(fs, dir, ino, &path);
-	if (!fs || retval)
-		fputs("???", f);
-	else {
-		safe_print(f, path, -1);
-		ext2fs_free_mem(&path);
+		if (retval == 0) {
+			safe_print(f, path, -1);
+			ext2fs_free_mem(&path);
+			return;
+		}
 	}
+	fputs("???", f);
 }
 
 static void print_time(FILE *f, time_t t)
diff --git a/e2fsck/sigcatcher.c b/e2fsck/sigcatcher.c
index 10b9328..f18a105 100644
--- a/e2fsck/sigcatcher.c
+++ b/e2fsck/sigcatcher.c
@@ -251,6 +251,7 @@ static struct str_table sigbus_code_table[] = {
 	END_TABLE
 };
 
+#if 0
 static struct str_table sigstrap_code_table[] = {
 #ifdef TRAP_BRKPT
 	DEFINE_ENTRY(TRAP_BRKPT)
@@ -260,6 +261,7 @@ static struct str_table sigstrap_code_table[] = {
 #endif
 	END_TABLE
 };
+#endif
 
 static struct str_table sigcld_code_table[] = {
 #ifdef CLD_EXITED
@@ -283,6 +285,7 @@ static struct str_table sigcld_code_table[] = {
 	END_TABLE
 };
 
+#if 0
 static struct str_table sigpoll_code_table[] = {
 #ifdef POLL_IN
 	DEFINE_ENTRY(POLL_IN)
@@ -304,6 +307,7 @@ static struct str_table sigpoll_code_table[] = {
 #endif
 	END_TABLE
 };
+#endif
 
 static const char *lookup_table(int num, struct str_table *table)
 {
@@ -378,7 +382,7 @@ static void die_signal_handler(int signum, siginfo_t *siginfo, void *context)
 void sigcatcher_setup(void)
 {
 	struct sigaction	sa;
-	
+
 	memset(&sa, 0, sizeof(struct sigaction));
 	sa.sa_sigaction = die_signal_handler;
 	sa.sa_flags = SA_SIGINFO;
@@ -387,7 +391,7 @@ void sigcatcher_setup(void)
 	sigaction(SIGILL, &sa, 0);
 	sigaction(SIGBUS, &sa, 0);
 	sigaction(SIGSEGV, &sa, 0);
-}	
+}
 
 
 #ifdef DEBUG
@@ -403,7 +407,7 @@ int main(int argc, char** argv)
 {
 	struct sigaction	sa;
 	char			*p = 0;
-	int 			i, c;
+	int			i, c;
 	volatile		x=0;
 
 	memset(&sa, 0, sizeof(struct sigaction));
diff --git a/e2fsck/unix.c b/e2fsck/unix.c
index 6161e46..7528ee9 100644
--- a/e2fsck/unix.c
+++ b/e2fsck/unix.c
@@ -1140,7 +1140,7 @@ int main (int argc, char *argv[])
 	int old_bitmaps;
 	__u32 features[3];
 	char *cp;
-	int qtype;  /* quota type */
+	int qtype = -2;  /* quota type, will be reset before actual use */
 
 	clear_problem_context(&pctx);
 	sigcatcher_setup();
@@ -1621,6 +1621,7 @@ no_journal:
 
 	if (ctx->qctx) {
 		int i, needs_writeout;
+
 		for (i = 0; i < MAXQUOTAS; i++) {
 			if (qtype != -1 && qtype != i)
 				continue;
diff --git a/e2fsck/util.c b/e2fsck/util.c
index 7c4caab..f3ba645 100644
--- a/e2fsck/util.c
+++ b/e2fsck/util.c
@@ -795,7 +795,6 @@ void e2fsck_set_bitmap_type(ext2_filsys fs, unsigned int default_type,
 			    const char *profile_name, unsigned int *old_type)
 {
 	unsigned type;
-	errcode_t	retval;
 
 	if (old_type)
 		*old_type = fs->default_bitmap_type;
diff --git a/lib/blkid/probe.c b/lib/blkid/probe.c
index 6970b12..2e3557e 100644
--- a/lib/blkid/probe.c
+++ b/lib/blkid/probe.c
@@ -1171,7 +1171,7 @@ static int probe_hfs(struct blkid_probe *probe __BLKID_ATTR((unused)),
 	    (memcmp(hfs->embed_sig, "HX", 2) == 0))
 		return 1;	/* Not hfs, but an embedded HFS+ */
 
-	uuid = blkid_le64(*((unsigned long long *) hfs->finder_info.id));
+	uuid = blkid_le64(hfs->finder_info.id);
 	if (uuid) {
 		sprintf(uuid_str, "%016llX", uuid);
 		blkid_set_tag(probe->dev, "UUID", uuid_str, 0);
@@ -1235,7 +1235,7 @@ static int probe_hfsplus(struct blkid_probe *probe,
 	    (memcmp(hfsplus->signature, "HX", 2) != 0))
 		return 1;
 
-	uuid = blkid_le64(*((unsigned long long *) hfsplus->finder_info.id));
+	uuid = blkid_le64(hfsplus->finder_info.id);
 	if (uuid) {
 		sprintf(uuid_str, "%016llX", uuid);
 		blkid_set_tag(probe->dev, "UUID", uuid_str, 0);
diff --git a/lib/blkid/probe.h b/lib/blkid/probe.h
index 37e80ef..d160e8b 100644
--- a/lib/blkid/probe.h
+++ b/lib/blkid/probe.h
@@ -502,7 +502,7 @@ struct hfs_finder_info {
         __u32        os9_folder;
         __u32        reserved;
         __u32        osx_folder;
-        __u8         id[8];
+        __u64        id;
 } __attribute__((packed));
 
 struct hfs_mdb {
diff --git a/lib/ext2fs/dblist.c b/lib/ext2fs/dblist.c
index ca1446b..4026682 100644
--- a/lib/ext2fs/dblist.c
+++ b/lib/ext2fs/dblist.c
@@ -72,10 +72,9 @@ static errcode_t make_dblist(ext2_filsys fs, ext2_ino_t size,
 	    (fs->dblist->magic == EXT2_ET_MAGIC_DBLIST))
 		return 0;
 
-	retval = ext2fs_get_mem(sizeof(struct ext2_struct_dblist), &dblist);
+	retval = ext2fs_get_memzero(sizeof(struct ext2_struct_dblist), &dblist);
 	if (retval)
-		goto cleanup;
-	memset(dblist, 0, sizeof(struct ext2_struct_dblist));
+		return retval;
 
 	dblist->magic = EXT2_ET_MAGIC_DBLIST;
 	dblist->fs = fs;
diff --git a/lib/ext2fs/qcow2.c b/lib/ext2fs/qcow2.c
index b0a0278..7fb983d 100644
--- a/lib/ext2fs/qcow2.c
+++ b/lib/ext2fs/qcow2.c
@@ -176,7 +176,7 @@ int qcow2_write_raw_image(int qcow2_fd, int raw_fd,
 
 	ret = ext2fs_get_memzero(img.cluster_size, &l2_table);
 	if (ret)
-		goto out;
+		return ret;
 
 	ret = ext2fs_get_memzero(1 << img.cluster_bits, &copy_buf);
 	if (ret)
diff --git a/lib/ext2fs/rw_bitmaps.c b/lib/ext2fs/rw_bitmaps.c
index 53f6ec4..3f3ed65 100644
--- a/lib/ext2fs/rw_bitmaps.c
+++ b/lib/ext2fs/rw_bitmaps.c
@@ -154,7 +154,6 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
 	int block_nbytes = EXT2_CLUSTERS_PER_GROUP(fs->super) / 8;
 	int inode_nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8;
 	int csum_flag = 0;
-	int do_image = fs->flags & EXT2_FLAG_IMAGE_FILE;
 	unsigned int	cnt;
 	blk64_t	blk;
 	blk64_t	blk_itr = EXT2FS_B2C(fs, fs->super->s_first_data_block);
diff --git a/lib/quota/common.h b/lib/quota/common.h
index b5e8331..747ef5d 100644
--- a/lib/quota/common.h
+++ b/lib/quota/common.h
@@ -15,12 +15,12 @@
 
 #define log_err(format, ...)	fprintf(stderr, \
 				"[ERROR] %s:%d:%s:: " format "\n", \
-				__FILE__, __LINE__, __func__, __VA_ARGS__)
+				__FILE__, __LINE__, __func__, ## __VA_ARGS__)
 
 #ifdef DEBUG_QUOTA
 # define log_debug(format, ...)	fprintf(stderr, \
 				"[DEBUG] %s:%d:%s:: " format "\n", \
-				__FILE__, __LINE__, __func__, __VA_ARGS__)
+				__FILE__, __LINE__, __func__, ## __VA_ARGS__)
 #else
 # define log_debug(format, ...)
 #endif
diff --git a/lib/quota/mkquota.c b/lib/quota/mkquota.c
index 973c35e..6bebe68 100644
--- a/lib/quota/mkquota.c
+++ b/lib/quota/mkquota.c
@@ -26,6 +26,7 @@
 #define UINT_TO_VOIDPTR(val)  ((void *)(intptr_t)(val))
 #define VOIDPTR_TO_UINT(ptr)  ((unsigned int)(intptr_t)(ptr))
 
+#if 0
 static void print_inode(struct ext2_inode *inode)
 {
 	if (!inode)
@@ -45,6 +46,7 @@ static void print_inode(struct ext2_inode *inode)
 
 	return;
 }
+#endif
 
 /*
  * Returns 0 if not able to find the quota file, otherwise returns its
@@ -131,8 +133,8 @@ errcode_t quota_write_inode(quota_ctx_t qctx, int qtype)
 	fs = qctx->fs;
 	retval = ext2fs_get_mem(sizeof(struct quota_handle), &h);
 	if (retval) {
-		log_err("Unable to allocate quota handle", "");
-		goto out;
+		log_err("Unable to allocate quota handle");
+		return retval;
 	}
 
 	ext2fs_read_bitmaps(fs);
@@ -147,7 +149,7 @@ errcode_t quota_write_inode(quota_ctx_t qctx, int qtype)
 
 		retval = quota_file_create(h, fs, i, fmt);
 		if (retval < 0) {
-			log_err("Cannot initialize io on quotafile", "");
+			log_err("Cannot initialize io on quotafile");
 			continue;
 		}
 
@@ -170,7 +172,7 @@ errcode_t quota_write_inode(quota_ctx_t qctx, int qtype)
 	}
 
 	ext2fs_write_bitmaps(fs);
-out:
+
 	if (h)
 		ext2fs_free_mem(&h);
 	return retval;
@@ -215,19 +217,18 @@ errcode_t quota_init_context(quota_ctx_t *qctx, ext2_filsys fs, int qtype)
 	dict_t	*dict;
 	quota_ctx_t ctx;
 
-	err = ext2fs_get_mem(sizeof(struct quota_ctx), &ctx);
+	err = ext2fs_get_memzero(sizeof(struct quota_ctx), &ctx);
 	if (err) {
-		log_err("Failed to allocate quota context", "");
+		log_err("Failed to allocate quota context");
 		return err;
 	}
 
-	memset(ctx, 0, sizeof(struct quota_ctx));
 	for (i = 0; i < MAXQUOTAS; i++) {
 		if ((qtype != -1) && (i != qtype))
 			continue;
 		err = ext2fs_get_mem(sizeof(dict_t), &dict);
 		if (err) {
-			log_err("Failed to allocate dictionary", "");
+			log_err("Failed to allocate dictionary");
 			return err;
 		}
 		ctx->quota_dict[i] = dict;
@@ -272,7 +273,7 @@ static struct dquot *get_dq(dict_t *dict, __u32 key)
 		dq = dnode_get(n);
 	else {
 		if (ext2fs_get_mem(sizeof(struct dquot), &dq)) {
-			log_err("Unable to allocate dquot", "");
+			log_err("Unable to allocate dquot");
 			return NULL;
 		}
 		memset(dq, 0, sizeof(struct dquot));
@@ -420,9 +421,11 @@ static int scan_dquots_callback(struct dquot *dquot, void *cb_data)
 	    dq->dq_dqb.dqb_curinodes != dquot->dq_dqb.dqb_curinodes) {
 		scan_data->usage_is_inconsistent = 1;
 		log_err("Usage inconsistent for ID %d: (%llu, %llu) != "
-			"(%llu,	%llu)", dq->dq_id, dq->dq_dqb.dqb_curspace,
-			dq->dq_dqb.dqb_curinodes, dquot->dq_dqb.dqb_curspace,
-			dquot->dq_dqb.dqb_curinodes);
+			"(%llu,	%llu)", dq->dq_id,
+			(unsigned long long)dq->dq_dqb.dqb_curspace,
+			(unsigned long long)dq->dq_dqb.dqb_curinodes,
+			(unsigned long long)dquot->dq_dqb.dqb_curspace,
+			(unsigned long long)dquot->dq_dqb.dqb_curinodes);
 	}
 
 	if (scan_data->update_limits) {
@@ -486,13 +489,13 @@ errcode_t quota_update_inode(quota_ctx_t qctx, ext2_ino_t qf_ino, int type)
 
 	err = ext2fs_get_mem(sizeof(struct quota_handle), &qh);
 	if (err) {
-		log_err("Unable to allocate quota handle", "");
+		log_err("Unable to allocate quota handle");
 		return err;
 	}
 
 	err = quota_file_open(qh, qctx->fs, qf_ino, type, -1, EXT2_FILE_WRITE);
 	if (err) {
-		log_err("Open quota file failed", "");
+		log_err("Open quota file failed");
 		goto out;
 	}
 
@@ -532,7 +535,7 @@ errcode_t quota_compare_and_update(quota_ctx_t qctx, int qtype,
 				     fs->super->s_grp_quota_inum;
 	err = quota_file_open(&qh, fs, qf_ino, qtype, -1, 0);
 	if (err) {
-		log_err("Open quota file failed", "");
+		log_err("Open quota file failed");
 		goto out;
 	}
 
@@ -542,7 +545,7 @@ errcode_t quota_compare_and_update(quota_ctx_t qctx, int qtype,
 	scan_data.usage_is_inconsistent = 0;
 	err = qh.qh_ops->scan_dquots(&qh, scan_dquots_callback, &scan_data);
 	if (err) {
-		log_err("Error scanning dquots", "");
+		log_err("Error scanning dquots");
 		goto out;
 	}
 	*usage_inconsistent = scan_data.usage_is_inconsistent;
diff --git a/lib/quota/quotaio.c b/lib/quota/quotaio.c
index 6e917f0..3b3bc0f 100644
--- a/lib/quota/quotaio.c
+++ b/lib/quota/quotaio.c
@@ -66,7 +66,6 @@ const char *quota_get_qf_name(int type, int fmt, char *buf)
 const char *quota_get_qf_path(const char *mntpt, int qtype, int fmt,
 			      char *path_buf, size_t path_buf_size)
 {
-	struct stat	qf_stat;
 	char qf_name[QUOTA_NAME_LEN];
 
 	if (!mntpt || !path_buf || !path_buf_size)
@@ -126,7 +125,6 @@ static int compute_num_blocks_proc(ext2_filsys fs, blk64_t *blocknr,
 			       int ref_offset EXT2FS_ATTR((unused)),
 			       void *private)
 {
-	blk64_t	block;
 	blk64_t *num_blocks = private;
 
 	*num_blocks += 1;
@@ -137,7 +135,6 @@ errcode_t quota_inode_truncate(ext2_filsys fs, ext2_ino_t ino)
 {
 	struct ext2_inode inode;
 	errcode_t err;
-	int i;
 
 	if ((err = ext2fs_read_inode(fs, ino, &inode)))
 		return err;
@@ -250,13 +247,13 @@ errcode_t quota_file_open(struct quota_handle *h, ext2_filsys fs,
 
 	if (h->qh_ops->check_file &&
 	    (h->qh_ops->check_file(h, type, fmt) == 0)) {
-		log_err("qh_ops->check_file failed", "");
+		log_err("qh_ops->check_file failed");
 		ext2fs_file_close(e2_file);
 		return -1;
 	}
 
 	if (h->qh_ops->init_io && (h->qh_ops->init_io(h) < 0)) {
-		log_err("qh_ops->init_io failed", "");
+		log_err("qh_ops->init_io failed");
 		ext2fs_file_close(e2_file);
 		return -1;
 	}
@@ -271,7 +268,7 @@ static errcode_t quota_inode_init_new(ext2_filsys fs, ext2_ino_t ino)
 
 	err = ext2fs_read_inode(fs, ino, &inode);
 	if (err) {
-		log_err("ex2fs_read_inode failed", "");
+		log_err("ex2fs_read_inode failed");
 		return err;
 	}
 
@@ -323,7 +320,7 @@ errcode_t quota_file_create(struct quota_handle *h, ext2_filsys fs, int type, in
 
 	err = quota_inode_init_new(fs, qf_inum);
 	if (err) {
-		log_err("init_new_quota_inode failed", "");
+		log_err("init_new_quota_inode failed");
 		goto out_err;
 	}
 	h->qh_qf.ino = qf_inum;
@@ -346,7 +343,7 @@ errcode_t quota_file_create(struct quota_handle *h, ext2_filsys fs, int type, in
 	h->qh_ops = &quotafile_ops_2;
 
 	if (h->qh_ops->new_io && (h->qh_ops->new_io(h) < 0)) {
-		log_err("qh_ops->new_io failed", "");
+		log_err("qh_ops->new_io failed");
 		goto out_err1;
 	}
 
@@ -393,7 +390,7 @@ struct dquot *get_empty_dquot(void)
 	struct dquot *dquot;
 
 	if (ext2fs_get_memzero(sizeof(struct dquot), &dquot)) {
-		log_err("Failed to allocate dquot", "");
+		log_err("Failed to allocate dquot");
 		return NULL;
 	}
 
diff --git a/lib/quota/quotaio_tree.c b/lib/quota/quotaio_tree.c
index 9080e77..80e4850 100644
--- a/lib/quota/quotaio_tree.c
+++ b/lib/quota/quotaio_tree.c
@@ -24,7 +24,7 @@ static inline dqbuf_t getdqbuf(void)
 {
 	dqbuf_t buf;
 	if (ext2fs_get_memzero(QT_BLKSIZE, &buf)) {
-		log_err("Failed to allocate dqbuf", "");
+		log_err("Failed to allocate dqbuf");
 		return NULL;
 	}
 
@@ -101,7 +101,7 @@ static int get_free_dqblk(struct quota_handle *h)
 		if (write_blk(h, info->dqi_blocks, buf) < 0) {
 			freedqbuf(buf);
 			log_err("Cannot allocate new quota block "
-				"(out of disk space).", "");
+				"(out of disk space).");
 			return -ENOSPC;
 		}
 		blk = info->dqi_blocks++;
@@ -231,7 +231,7 @@ static uint find_free_dqentry(struct quota_handle *h, struct dquot *dquot,
 
 	if (i == qtree_dqstr_in_blk(info))
 		log_err("find_free_dqentry(): Data block full but it "
-			"shouldn't.", "");
+			"shouldn't.");
 
 	write_blk(h, blk, buf);
 	dquot->dq_dqb.u.v2_mdqb.dqb_off =
diff --git a/lib/quota/quotaio_v2.c b/lib/quota/quotaio_v2.c
index e658706..b90bb6e 100644
--- a/lib/quota/quotaio_v2.c
+++ b/lib/quota/quotaio_v2.c
@@ -198,8 +198,7 @@ static int v2_check_file(struct quota_handle *h, int type, int fmt)
 
 	if (ext2fs_le32_to_cpu(dqh.dqh_magic) != file_magics[type]) {
 		if (ext2fs_be32_to_cpu(dqh.dqh_magic) == file_magics[type])
-			log_err("Your quota file is stored in wrong "
-				"endianity.", "");
+			log_err("The quota file is stored in wrong endianity.");
 		return 0;
 	}
 	if (ext2fs_le32_to_cpu(dqh.dqh_version) > known_versions[type])
@@ -320,6 +319,6 @@ static int v2_scan_dquots(struct quota_handle *h,
  */
 static int v2_report(struct quota_handle *h, int verbose)
 {
-	log_err("Not Implemented.", "");
+	log_err("Not Implemented.");
 	return -1;
 }
diff --git a/resize/resize2fs.c b/resize/resize2fs.c
index dc2805d..4a78dd2 100644
--- a/resize/resize2fs.c
+++ b/resize/resize2fs.c
@@ -1708,24 +1708,27 @@ static errcode_t fix_resize_inode(ext2_filsys fs)
 {
 	struct ext2_inode	inode;
 	errcode_t		retval;
-	char *			block_buf;
+	char			*block_buf;
 
 	if (!(fs->super->s_feature_compat &
 	      EXT2_FEATURE_COMPAT_RESIZE_INODE))
 		return 0;
 
 	retval = ext2fs_get_mem(fs->blocksize, &block_buf);
-	if (retval) goto errout;
+	if (retval)
+		return retval;
 
 	retval = ext2fs_read_inode(fs, EXT2_RESIZE_INO, &inode);
-	if (retval) goto errout;
+	if (retval)
+		goto errout;
 
 	ext2fs_iblk_set(fs, &inode, 1);
 
 	retval = ext2fs_write_inode(fs, EXT2_RESIZE_INO, &inode);
-	if (retval) goto errout;
+	if (retval)
+		goto errout;
 
-	if (!inode.i_block[EXT2_DIND_BLOCK]) {
+	if (inode.i_block[EXT2_DIND_BLOCK] == 0) {
 		/*
 		 * Avoid zeroing out block #0; that's rude.  This
 		 * should never happen anyway since the filesystem
@@ -1740,7 +1743,8 @@ static errcode_t fix_resize_inode(ext2_filsys fs)
 
 	retval = io_channel_write_blk64(fs->io, inode.i_block[EXT2_DIND_BLOCK],
 					1, block_buf);
-	if (retval) goto errout;
+	if (retval)
+		goto errout;
 
 	retval = ext2fs_create_resize_inode(fs);
 	if (retval)
-- 
1.7.3.4

--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists