From patchwork Fri May 13 03:32:35 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Metzmacher X-Patchwork-Id: 781672 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter2.kernel.org (8.14.4/8.14.3) with ESMTP id p4D3hjqU025325 for ; Fri, 13 May 2011 03:44:37 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754536Ab1EMDoh (ORCPT ); Thu, 12 May 2011 23:44:37 -0400 Received: from mo-p05-ob.rzone.de ([81.169.146.182]:45197 "EHLO mo-p05-ob.rzone.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753720Ab1EMDog (ORCPT ); Thu, 12 May 2011 23:44:36 -0400 X-RZG-AUTH: :IWkQb0WIdvqIIwNfJfyiKBgoQwjwNKmLapmn/F6ALVwJKz3CifhgojcxH2roPg== X-RZG-CLASS-ID: mo05 Received: from localhost.localdomain (dvm01.metzemix.de [85.214.18.123]) by post.strato.de (mrclete mo16) (RZmta 25.18) with ESMTPA id L06e99n4CM0uNq ; Fri, 13 May 2011 05:33:08 +0200 (MEST) From: Stefan Metzmacher To: linux-cifs@vger.kernel.org Cc: Stefan Metzmacher Subject: [PATCH] cifs: fix cifsConvertToUCS() for the mapchars case Date: Fri, 13 May 2011 05:32:35 +0200 Message-Id: <1305257555-20656-2-git-send-email-metze@samba.org> X-Mailer: git-send-email 1.7.0.4 In-Reply-To: <1305257555-20656-1-git-send-email-metze@samba.org> References: <1305257555-20656-1-git-send-email-metze@samba.org> Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter2.kernel.org [140.211.167.43]); Fri, 13 May 2011 03:44:37 +0000 (UTC) Commit "cifs: fix unaligned accesses in cifsConvertToUCS" (84cdf74e8096a10dd6acbb870dd404b92f07a756) does multiple steps in just one commit (moving the function and changing it without testing). put_unaligned_le16(temp, &target[j]); is never called for any codepoint the goes via the 'default' switch statement. As a result we put just zero (or maybe uninitialized) bytes into the target buffer, Signed-off-by: Stefan Metzmacher --- fs/cifs/cifs_unicode.c | 20 ++++++++++---------- 1 files changed, 10 insertions(+), 10 deletions(-) diff --git a/fs/cifs/cifs_unicode.c b/fs/cifs/cifs_unicode.c index fc0fd4f..b1ff0bd 100644 --- a/fs/cifs/cifs_unicode.c +++ b/fs/cifs/cifs_unicode.c @@ -276,6 +276,7 @@ cifsConvertToUCS(__le16 *target, const char *source, int maxlen, return cifs_strtoUCS(target, source, PATH_MAX, cp); for (i = 0, j = 0; i < maxlen; j++) { + charlen = 1; src_char = source[i]; switch (src_char) { case 0: @@ -315,18 +316,17 @@ cifsConvertToUCS(__le16 *target, const char *source, int maxlen, temp = 0x003f; charlen = 1; } - len_remaining -= charlen; - /* - * character may take more than one byte in the source - * string, but will take exactly two bytes in the - * target string - */ - i += charlen; - continue; + break; } + /* + * character may take more than one byte in the source + * string, but will take exactly two bytes in the + * target string + */ put_unaligned_le16(temp, &target[j]); - i++; /* move to next char in source string */ - len_remaining--; + /* move to next char in source string */ + i += charlen; + len_remaining -= charlen; } ctoUCS_out: