cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

unc.c (1475B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 *   Copyright (C) 2020, Microsoft Corporation.
      4 *
      5 *   Author(s): Steve French <stfrench@microsoft.com>
      6 *              Suresh Jayaraman <sjayaraman@suse.de>
      7 *              Jeff Layton <jlayton@kernel.org>
      8 */
      9
     10#include <linux/fs.h>
     11#include <linux/slab.h>
     12#include <linux/inet.h>
     13#include <linux/ctype.h>
     14#include "cifsglob.h"
     15#include "cifsproto.h"
     16
     17/* extract the host portion of the UNC string */
     18char *extract_hostname(const char *unc)
     19{
     20	const char *src;
     21	char *dst, *delim;
     22	unsigned int len;
     23
     24	/* skip double chars at beginning of string */
     25	/* BB: check validity of these bytes? */
     26	if (strlen(unc) < 3)
     27		return ERR_PTR(-EINVAL);
     28	for (src = unc; *src && *src == '\\'; src++)
     29		;
     30	if (!*src)
     31		return ERR_PTR(-EINVAL);
     32
     33	/* delimiter between hostname and sharename is always '\\' now */
     34	delim = strchr(src, '\\');
     35	if (!delim)
     36		return ERR_PTR(-EINVAL);
     37
     38	len = delim - src;
     39	dst = kmalloc((len + 1), GFP_KERNEL);
     40	if (dst == NULL)
     41		return ERR_PTR(-ENOMEM);
     42
     43	memcpy(dst, src, len);
     44	dst[len] = '\0';
     45
     46	return dst;
     47}
     48
     49char *extract_sharename(const char *unc)
     50{
     51	const char *src;
     52	char *delim, *dst;
     53
     54	/* skip double chars at the beginning */
     55	src = unc + 2;
     56
     57	/* share name is always preceded by '\\' now */
     58	delim = strchr(src, '\\');
     59	if (!delim)
     60		return ERR_PTR(-EINVAL);
     61	delim++;
     62
     63	/* caller has to free the memory */
     64	dst = kstrdup(delim, GFP_KERNEL);
     65	if (!dst)
     66		return ERR_PTR(-ENOMEM);
     67
     68	return dst;
     69}