Messages in this thread | | | Date | Fri, 26 Mar 2021 15:22:30 +0100 | From | Peter Zijlstra <> | Subject | Re: [PATCH v2 6/9] debugfs: Implement debugfs_create_str() |
| |
On Fri, Mar 26, 2021 at 01:53:59PM +0100, Rasmus Villemoes wrote: > On 26/03/2021 12.38, Peter Zijlstra wrote:
> > + > > +again: > > + rcu_read_lock(); > > + str = rcu_dereference(*(char **)file->private_data); > > + len = strlen(str) + 1; > > + > > + if (!copy || copy_len < len) { > > + rcu_read_unlock(); > > + kfree(copy); > > + copy = kmalloc(len + 1, GFP_KERNEL); > > + if (!copy) { > > + debugfs_file_put(dentry); > > + return -ENOMEM; > > + } > > + copy_len = len; > > + goto again; > > + } > > + > > + strncpy(copy, str, len); > > + copy[len] = '\n'; > > + copy[len+1] = '\0'; > > + rcu_read_unlock(); > > As noted (accidentally off-list), this is broken. I think you want this > on top > > - len = strlen(str) + 1; > + len = strlen(str);
kmalloc(len + 2, ...);
> - strncpy(copy, str, len); > + memcpy(copy, str, len); > copy[len] = '\n'; > - copy[len+1] = '\0';
I'll go with strscpy() I tihnk, something like:
len = strscpy(copy, str, len); if (len < 0) return len; copy[len] = '\n'; copy[len + 1] = '\0';
> > +EXPORT_SYMBOL_GPL(debugfs_read_file_str); > > Why?
Copy-pasta from debugfs_*_bool(). This thing seems to export everything and I figured I'd go along with that.
| |