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

tty.c (1043B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
      4 */
      5
      6#include <stdlib.h>
      7#include <unistd.h>
      8#include <errno.h>
      9#include <fcntl.h>
     10#include <kern_util.h>
     11#include <os.h>
     12
     13struct grantpt_info {
     14	int fd;
     15	int res;
     16	int err;
     17};
     18
     19static void grantpt_cb(void *arg)
     20{
     21	struct grantpt_info *info = arg;
     22
     23	info->res = grantpt(info->fd);
     24	info->err = errno;
     25}
     26
     27int get_pty(void)
     28{
     29	struct grantpt_info info;
     30	int fd, err;
     31
     32	fd = open("/dev/ptmx", O_RDWR);
     33	if (fd < 0) {
     34		err = -errno;
     35		printk(UM_KERN_ERR "get_pty : Couldn't open /dev/ptmx - "
     36		       "err = %d\n", errno);
     37		return err;
     38	}
     39
     40	info.fd = fd;
     41	initial_thread_cb(grantpt_cb, &info);
     42
     43	if (info.res < 0) {
     44		err = -info.err;
     45		printk(UM_KERN_ERR "get_pty : Couldn't grant pty - "
     46		       "errno = %d\n", -info.err);
     47		goto out;
     48	}
     49
     50	if (unlockpt(fd) < 0) {
     51		err = -errno;
     52		printk(UM_KERN_ERR "get_pty : Couldn't unlock pty - "
     53		       "errno = %d\n", errno);
     54		goto out;
     55	}
     56	return fd;
     57out:
     58	close(fd);
     59	return err;
     60}