Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753106AbbH1VsS (ORCPT ); Fri, 28 Aug 2015 17:48:18 -0400 Received: from smtprelay0043.hostedemail.com ([216.40.44.43]:60481 "EHLO smtprelay.hostedemail.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752685AbbH1VsR (ORCPT ); Fri, 28 Aug 2015 17:48:17 -0400 X-Session-Marker: 726F737465647440676F6F646D69732E6F7267 X-Spam-Summary: 2,0,0,,d41d8cd98f00b204,rostedt@goodmis.org,:::::::::::::::::::,RULES_HIT:41:355:379:541:599:800:960:973:988:989:1260:1277:1311:1313:1314:1345:1359:1431:1437:1515:1516:1518:1534:1541:1593:1594:1711:1730:1747:1777:1792:2194:2199:2393:2553:2559:2562:2901:3138:3139:3140:3141:3142:3353:3622:3865:3866:3867:3868:3870:3871:3872:4250:4605:5007:6119:6261:7875:7903:10004:10400:10848:10967:11026:11232:11658:11914:12043:12114:12296:12438:12517:12519:12740:13069:13311:13357:21080,0,RBL:none,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:none,Custom_rules:0:0:0 X-HE-Tag: work62_4805dd7d1a834 X-Filterd-Recvd-Size: 2849 Date: Fri, 28 Aug 2015 17:48:13 -0400 From: Steven Rostedt To: Alexei Starovoitov Cc: "David S. Miller" , Ingo Molnar , Masami Hiramatsu , Wang Nan , He Kuang , Daniel Borkmann , Brendan Gregg , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 net-next 1/2] lib: introduce strncpy_from_unsafe() Message-ID: <20150828174813.23e6e78b@gandalf.local.home> In-Reply-To: <1440791509-5450-2-git-send-email-ast@plumgrid.com> References: <1440791509-5450-1-git-send-email-ast@plumgrid.com> <1440791509-5450-2-git-send-email-ast@plumgrid.com> X-Mailer: Claws Mail 3.11.1 (GTK+ 2.24.28; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1854 Lines: 78 On Fri, 28 Aug 2015 12:51:48 -0700 Alexei Starovoitov wrote: > EXPORT_SYMBOL(strncpy_from_user); > + > +/** > + * strncpy_from_unsafe: - Copy a NUL terminated string from unsafe address. > + * @dst: Destination address, in kernel space. This buffer must be at > + * least @count bytes long. > + * @src: Unsafe address. > + * @count: Maximum number of bytes to copy, including the trailing NUL. > + * > + * Copies a NUL-terminated string from unsafe address to kernel buffer. > + * > + * On success, returns the length of the string (not including the trailing > + * NUL). I think it includes the NUL. > + * > + * If access fails, returns -EFAULT (some data may have been copied). > + * > + * If @count is smaller than the length of the string, copies @count bytes > + * and returns @count. > + */ > +long strncpy_from_unsafe(char *dst, const void *unsafe_addr, long count) > +{ > + mm_segment_t old_fs = get_fs(); > + const void *src = unsafe_addr; src = unsafe_addr = 0x100; *unsafe_addr = "1\0"; > + long ret; > + > + if (unlikely(count <= 0)) > + return 0; > + > + set_fs(KERNEL_DS); > + pagefault_disable(); > + > + do { > + ret = __copy_from_user_inatomic(dst++, > + (const void __user __force *)src++, 1); First loop: dst[-1] = '1' src = 0x101 Second loop: dst[-1] = '\0' src = 0x102 > + } while (dst[-1] && ret == 0 && src - unsafe_addr < count); > + > + dst[-1] = '\0'; > + pagefault_enable(); > + set_fs(old_fs); > + > + return ret < 0 ? ret : src - unsafe_addr; src - unsafe_addr = 0x102 - 0x100 = 2 Included the NUL. -- Steve > +} -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/