On Tue, Oct 05, 2021 at 09:30:10AM -0700, Kees Cook wrote:
On Mon, Sep 27, 2021 at 09:37:56AM -0700, Luis Chamberlain wrote:
--- /dev/null +++ b/lib/test_sysfs.c @@ -0,0 +1,921 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR copyleft-next-0.3.1 +/*
- sysfs test driver
- Copyright (C) 2021 Luis Chamberlain mcgrof@kernel.org
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 2 of the License, or at your option any
- later version; or, when distributed separately from the Linux kernel or
- when incorporated into other software packages, subject to the following
- license:
- This program is free software; you can redistribute it and/or modify it
- under the terms of copyleft-next (version 0.3.1 or later) as published
As Greg suggested, please drop the boilerplate here.
Sure, sorry for missing that fixed.
+static ssize_t config_show(struct device *dev,
struct device_attribute *attr,
char *buf)
+{
- struct sysfs_test_device *test_dev = dev_to_test_dev(dev);
- struct test_config *config = &test_dev->config;
- int len = 0;
- test_dev_config_lock(test_dev);
- len += snprintf(buf, PAGE_SIZE,
"Configuration for: %s\n",
dev_name(dev));
Please use sysfs_emit() instead of snprintf().
Oh nice, done and fixed also in the other places.
+static int sysfs_test_dev_alloc_blockdev(struct sysfs_test_device *test_dev) +{
- int ret = -ENOMEM;
- test_dev->disk = blk_alloc_disk(NUMA_NO_NODE);
- if (!test_dev->disk) {
pr_err("Error allocating disk structure for device %d\n",
test_dev->dev_idx);
goto out;
- }
- test_dev->disk->major = sysfs_test_major;
- test_dev->disk->first_minor = test_dev->dev_idx + 1;
- test_dev->disk->fops = &sysfs_testdev_ops;
- test_dev->disk->private_data = test_dev;
- snprintf(test_dev->disk->disk_name, 16, "test_sysfs%d",
test_dev->dev_idx);
Prefer sizeof(test_dev->disk->disk_name) over open-coded "16".
Sure.
+static ssize_t read_reset_first_test_dev(struct file *file,
char __user *user_buf,
size_t count, loff_t *ppos)
+{
- ssize_t len;
- char buf[32];
- reset_first_test_dev++;
- len = sprintf(buf, "%d\n", reset_first_test_dev);
Even though it's safe as-is, I was going to suggest scnprintf() here (i.e. explicit bounds and a bounds-checked "len"). However, scnprintf() returns ssize_t, and there's no bounds checking in simple_read_from_buffer. That needs fixing (I'll send a patch).
OK we can later change it to scnprintf() once your patch gets merged.
--- /dev/null +++ b/tools/testing/selftests/sysfs/sysfs.sh @@ -0,0 +1,1208 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2021 Luis Chamberlain mcgrof@kernel.org +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or at your option any +# later version; or, when distributed separately from the Linux kernel or +# when incorporated into other software packages, subject to the following +# license: +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of copyleft-next (version 0.3.1 or later) as published +# at http://copyleft-next.org/.
+# This performs a series tests against the sysfs filesystem.
-boilerplate
Nuked.
+check_dmesg() +{
- # filter out intentional WARNINGs or Oopses
- local filter=${1:-_check_dmesg_filter}
- _dmesg_since_test_start | $filter >$seqres.dmesg
- egrep -q -e "kernel BUG at" \
-e "WARNING:" \
-e "\bBUG:" \
-e "Oops:" \
-e "possible recursive locking detected" \
-e "Internal error" \
-e "(INFO|ERR): suspicious RCU usage" \
-e "INFO: possible circular locking dependency detected" \
-e "general protection fault:" \
-e "BUG .* remaining" \
-e "UBSAN:" \
$seqres.dmesg
Is just looking for "call trace" sufficient here?
So far from my testing yes. This strategy is also borrowed from fstests and that's what is done there, and so quite a lot of testing has been done with that. If we are to consider an enhancement here we should then also consider an enhancement welcome for fstests.
Luis
linux-kselftest-mirror@lists.linaro.org