€•ÆnŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ//translations/zh_CN/security/tpm/tpm_vtpm_proxy”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/zh_TW/security/tpm/tpm_vtpm_proxy”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/it_IT/security/tpm/tpm_vtpm_proxy”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/ja_JP/security/tpm/tpm_vtpm_proxy”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/ko_KR/security/tpm/tpm_vtpm_proxy”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/pt_BR/security/tpm/tpm_vtpm_proxy”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ//translations/sp_SP/security/tpm/tpm_vtpm_proxy”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ-Virtual TPM Proxy Driver for Linux Containers”h]”hŒ-Virtual TPM Proxy Driver for Linux Containers”…””}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒI/var/lib/git/docbuild/linux/Documentation/security/tpm/tpm_vtpm_proxy.rst”h´KubhŒ line_block”“”)”}”(hhh]”(hh´“”)”}”(hŒAuthors:”h]”hŒAuthors:”…””}”(hhÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h´Œindent”KhhÍh²hh³hÊh´KubhÐ)”}”(hŒ*Stefan Berger ”h]”(hŒStefan Berger <”…””}”(hhàh²hh³Nh´NubhŒ reference”“”)”}”(hŒstefanb@linux.vnet.ibm.com”h]”hŒstefanb@linux.vnet.ibm.com”…””}”(hhêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œ!mailto:stefanb@linux.vnet.ibm.com”uh1hèhhàubhŒ>”…””}”(hhàh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h´hßKhhÍh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËhh·h²hh³hÊh´KubhŒ paragraph”“”)”}”(hŒlThis document describes the virtual Trusted Platform Module (vTPM) proxy device driver for Linux containers.”h]”hŒlThis document describes the virtual Trusted Platform Module (vTPM) proxy device driver for Linux containers.”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´Khh·h²hubh¶)”}”(hhh]”(h»)”}”(hŒ Introduction”h]”hŒ Introduction”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´K ubj )”}”(hXThe goal of this work is to provide TPM functionality to each Linux container. This allows programs to interact with a TPM in a container the same way they interact with a TPM on the physical system. Each container gets its own unique, emulated, software TPM.”h]”hXThe goal of this work is to provide TPM functionality to each Linux container. This allows programs to interact with a TPM in a container the same way they interact with a TPM on the physical system. Each container gets its own unique, emulated, software TPM.”…””}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´Khjh²hubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1hµhh·h²hh³hÊh´K ubh¶)”}”(hhh]”(h»)”}”(hŒDesign”h]”hŒDesign”…””}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjAh²hh³hÊh´Kubj )”}”(hXUTo make an emulated software TPM available to each container, the container management stack needs to create a device pair consisting of a client TPM character device ``/dev/tpmX`` (with X=0,1,2...) and a 'server side' file descriptor. The former is moved into the container by creating a character device with the appropriate major and minor numbers while the file descriptor is passed to the TPM emulator. Software inside the container can then send TPM commands using the character device and the emulator will receive the commands via the file descriptor and use it for sending back responses.”h]”(hŒ§To make an emulated software TPM available to each container, the container management stack needs to create a device pair consisting of a client TPM character device ”…””}”(hjRh²hh³Nh´NubhŒliteral”“”)”}”(hŒ ``/dev/tpmX``”h]”hŒ /dev/tpmX”…””}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZhjRubhX¥ (with X=0,1,2...) and a ‘server side’ file descriptor. The former is moved into the container by creating a character device with the appropriate major and minor numbers while the file descriptor is passed to the TPM emulator. Software inside the container can then send TPM commands using the character device and the emulator will receive the commands via the file descriptor and use it for sending back responses.”…””}”(hjRh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´KhjAh²hubj )”}”(hXUTo support this, the virtual TPM proxy driver provides a device ``/dev/vtpmx`` that is used to create device pairs using an ioctl. The ioctl takes as an input flags for configuring the device. The flags for example indicate whether TPM 1.2 or TPM 2 functionality is supported by the TPM emulator. The result of the ioctl are the file descriptor for the 'server side' as well as the major and minor numbers of the character device that was created. Besides that the number of the TPM character device is returned. If for example ``/dev/tpm10`` was created, the number (``dev_num``) 10 is returned.”h]”(hŒ@To support this, the virtual TPM proxy driver provides a device ”…””}”(hjth²hh³Nh´Nubj[)”}”(hŒ``/dev/vtpmx``”h]”hŒ /dev/vtpmx”…””}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZhjtubhXÇ that is used to create device pairs using an ioctl. The ioctl takes as an input flags for configuring the device. The flags for example indicate whether TPM 1.2 or TPM 2 functionality is supported by the TPM emulator. The result of the ioctl are the file descriptor for the ‘server side’ as well as the major and minor numbers of the character device that was created. Besides that the number of the TPM character device is returned. If for example ”…””}”(hjth²hh³Nh´Nubj[)”}”(hŒ``/dev/tpm10``”h]”hŒ /dev/tpm10”…””}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZhjtubhŒ was created, the number (”…””}”(hjth²hh³Nh´Nubj[)”}”(hŒ ``dev_num``”h]”hŒdev_num”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZhjtubhŒ) 10 is returned.”…””}”(hjth²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´KhjAh²hubj )”}”(hŒßOnce the device has been created, the driver will immediately try to talk to the TPM. All commands from the driver can be read from the file descriptor returned by the ioctl. The commands should be responded to immediately.”h]”hŒßOnce the device has been created, the driver will immediately try to talk to the TPM. All commands from the driver can be read from the file descriptor returned by the ioctl. The commands should be responded to immediately.”…””}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³hÊh´K(hjAh²hubeh}”(h]”Œdesign”ah ]”h"]”Œdesign”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒUAPI”h]”hŒUAPI”…””}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÎh²hh³hÊh´K-ubhŒindex”“”)”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œvtpm_proxy_flags (C enum)”Œc.vtpm_proxy_flags”hNt”auh1jßhjÎh²hh³Nh´NubhŒdesc”“”)”}”(hhh]”(hŒdesc_signature”“”)”}”(hŒvtpm_proxy_flags”h]”hŒdesc_signature_line”“”)”}”(hŒenum vtpm_proxy_flags”h]”(hŒdesc_sig_keyword”“”)”}”(hŒenum”h]”hŒenum”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jhjýh²hh³Œk/var/lib/git/docbuild/linux/Documentation/security/tpm/tpm_vtpm_proxy:47: ./include/uapi/linux/vtpm_proxy.h”h´KubhŒdesc_sig_space”“”)”}”(hŒ ”h]”hŒ ”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jhjýh²hh³jh´KubhŒ desc_name”“”)”}”(hŒvtpm_proxy_flags”h]”hŒ desc_sig_name”“”)”}”(hjùh]”hŒvtpm_proxy_flags”…””}”(hj,h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j*hj&ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j$hjýh²hh³jh´Kubeh}”(h]”h ]”h"]”h$]”h&]”jBjCŒ add_permalink”ˆuh1jûŒsphinx_line_type”Œ declarator”hj÷h²hh³jh´Kubah}”(h]”jîah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jõh³jh´Khjòh²hubhŒ desc_content”“”)”}”(hhh]”j )”}”(hŒflags for the proxy TPM”h]”hŒflags for the proxy TPM”…””}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œk/var/lib/git/docbuild/linux/Documentation/security/tpm/tpm_vtpm_proxy:47: ./include/uapi/linux/vtpm_proxy.h”h´KhjZh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jXhjòh²hh³jh´Kubeh}”(h]”h ]”(Œc”Œenum”eh"]”h$]”h&]”Œdomain”juŒobjtype”jvŒdesctype”jvŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jðh²hhjÎh³Nh´NubhŒ container”“”)”}”(hŒM**Constants** ``VTPM_PROXY_FLAG_TPM2`` the proxy TPM uses TPM 2.0 protocol”h]”(j )”}”(hŒ **Constants**”h]”hŒstrong”“”)”}”(hjˆh]”hŒ Constants”…””}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œk/var/lib/git/docbuild/linux/Documentation/security/tpm/tpm_vtpm_proxy:47: ./include/uapi/linux/vtpm_proxy.h”h´Khj‚ubhŒdefinition_list”“”)”}”(hhh]”hŒdefinition_list_item”“”)”}”(hŒ<``VTPM_PROXY_FLAG_TPM2`` the proxy TPM uses TPM 2.0 protocol”h]”(hŒterm”“”)”}”(hŒ``VTPM_PROXY_FLAG_TPM2``”h]”j[)”}”(hj¯h]”hŒVTPM_PROXY_FLAG_TPM2”…””}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j«h³Œk/var/lib/git/docbuild/linux/Documentation/security/tpm/tpm_vtpm_proxy:47: ./include/uapi/linux/vtpm_proxy.h”h´Khj§ubhŒ definition”“”)”}”(hhh]”j )”}”(hŒ#the proxy TPM uses TPM 2.0 protocol”h]”hŒ#the proxy TPM uses TPM 2.0 protocol”…””}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œk/var/lib/git/docbuild/linux/Documentation/security/tpm/tpm_vtpm_proxy:47: ./include/uapi/linux/vtpm_proxy.h”h´KhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³jÄh´Khj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjÎh²hh³Nh´Nubjà)”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jìŒvtpm_proxy_new_dev (C struct)”Œc.vtpm_proxy_new_dev”hNt”auh1jßhjÎh²hh³Nh´Nubjñ)”}”(hhh]”(jö)”}”(hŒvtpm_proxy_new_dev”h]”jü)”}”(hŒstruct vtpm_proxy_new_dev”h]”(j)”}”(hŒstruct”h]”hŒstruct”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh²hh³Œk/var/lib/git/docbuild/linux/Documentation/security/tpm/tpm_vtpm_proxy:47: ./include/uapi/linux/vtpm_proxy.h”h´K$ubj)”}”(hŒ ”h]”hŒ ”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjh²hh³jh´K$ubj%)”}”(hŒvtpm_proxy_new_dev”h]”j+)”}”(hjh]”hŒvtpm_proxy_new_dev”…””}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j*hj(ubah}”(h]”h ]”(j=j>eh"]”h$]”h&]”jBjCuh1j$hjh²hh³jh´K$ubeh}”(h]”h ]”h"]”h$]”h&]”jBjCjJˆuh1jûjKjLhjh²hh³jh´K$ubah}”(h]”jþah ]”(jPjQeh"]”h$]”h&]”jUˆjV)jWhuh1jõh³jh´K$hjh²hubjY)”}”(hhh]”j )”}”(hŒeh"]”h$]”h&]”jBjCuh1j$hj h²hh³jh´MfubhŒdesc_parameterlist”“”)”}”(hŒ:(struct file *file, unsigned int ioctl, unsigned long arg)”h]”(hŒdesc_parameter”“”)”}”(hŒstruct file *file”h]”(j)”}”(hj h]”hŒstruct”…””}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjMubj)”}”(hŒ ”h]”hŒ ”…””}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjMubh)”}”(hhh]”j+)”}”(hŒfile”h]”hŒfile”…””}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j*hjlubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”Œ identifier”Œ reftarget”jqŒmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)”}”Œdata”]”jŠŒ ASTIdentifier”“”)”}”j…j3sbŒc.vtpmx_ioc_new_dev”†”asbuh1hhjMubj)”}”(hŒ ”h]”hŒ ”…””}”(hj—h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjMubhŒdesc_sig_punctuation”“”)”}”(hŒ*”h]”hŒ*”…””}”(hj§h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j¥hjMubj+)”}”(hŒfile”h]”hŒfile”…””}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j*hjMubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjBjCuh1jKhjGubjL)”}”(hŒunsigned int ioctl”h]”(j)”}”(hŒunsigned”h]”hŒunsigned”…””}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjËubj)”}”(hŒ ”h]”hŒ ”…””}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjËubj)”}”(hŒint”h]”hŒint”…””}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjËubj)”}”(hŒ ”h]”hŒ ”…””}”(hjùh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjËubj+)”}”(hŒioctl”h]”hŒioctl”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j*hjËubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjBjCuh1jKhjGubjL)”}”(hŒunsigned long arg”h]”(j)”}”(hŒunsigned”h]”hŒunsigned”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjubj)”}”(hŒ ”h]”hŒ ”…””}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjubj)”}”(hŒlong”h]”hŒlong”…””}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjubj)”}”(hŒ ”h]”hŒ ”…””}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jhjubj+)”}”(hŒarg”h]”hŒarg”…””}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j6ah"]”h$]”h&]”uh1j*hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjBjCuh1jKhjGubeh}”(h]”h ]”h"]”h$]”h&]”jBjCuh1jEhj h²hh³jh´Mfubeh}”(h]”h ]”h"]”h$]”h&]”jBjCjJˆuh1jûjKjLhjh²hh³jh´Mfubah}”(h]”jah ]”(jPjQeh"]”h$]”h&]”jUˆjV)jWhuh1jõh³jh´Mfhjh²hubjY)”}”(hhh]”j )”}”(hŒ0handler for the ``VTPM_PROXY_IOC_NEW_DEV`` ioctl”h]”(hŒhandler for the ”…””}”(hj‚h²hh³Nh´Nubj[)”}”(hŒ``VTPM_PROXY_IOC_NEW_DEV``”h]”hŒVTPM_PROXY_IOC_NEW_DEV”…””}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZhj‚ubhŒ ioctl”…””}”(hj‚h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œm/var/lib/git/docbuild/linux/Documentation/security/tpm/tpm_vtpm_proxy:49: ./drivers/char/tpm/tpm_vtpm_proxy.c”h´Mfhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jXhjh²hh³jh´Mfubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j¬j|j¬j}‰j~‰j‰uh1jðh²hhjÎh³Nh´Nubj)”}”(hX **Parameters** ``struct file *file`` /dev/vtpmx ``unsigned int ioctl`` the ioctl number ``unsigned long arg`` pointer to the struct vtpmx_proxy_new_dev **Description** Creates an anonymous file that is used by the process acting as a TPM to communicate with the client processes. The function will also add a new TPM device through which data is proxied to this TPM acting process. The caller will be provided with a file descriptor to communicate with the clients and major and minor numbers for the TPM device.”h]”(j )”}”(hŒ**Parameters**”h]”j‹)”}”(hj¶h]”hŒ Parameters”…””}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œm/var/lib/git/docbuild/linux/Documentation/security/tpm/tpm_vtpm_proxy:49: ./drivers/char/tpm/tpm_vtpm_proxy.c”h´Mjhj°ubj¡)”}”(hhh]”(j¦)”}”(hŒ!``struct file *file`` /dev/vtpmx ”h]”(j¬)”}”(hŒ``struct file *file``”h]”j[)”}”(hjÕh]”hŒstruct file *file”…””}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j«h³Œm/var/lib/git/docbuild/linux/Documentation/security/tpm/tpm_vtpm_proxy:49: ./drivers/char/tpm/tpm_vtpm_proxy.c”h´MghjÏubjÆ)”}”(hhh]”j )”}”(hŒ /dev/vtpmx”h]”hŒ /dev/vtpmx”…””}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jêh´Mghjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhjÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³jêh´MghjÌubj¦)”}”(hŒ(``unsigned int ioctl`` the ioctl number ”h]”(j¬)”}”(hŒ``unsigned int ioctl``”h]”j[)”}”(hjh]”hŒunsigned int ioctl”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j«h³Œm/var/lib/git/docbuild/linux/Documentation/security/tpm/tpm_vtpm_proxy:49: ./drivers/char/tpm/tpm_vtpm_proxy.c”h´MhhjubjÆ)”}”(hhh]”j )”}”(hŒthe ioctl number”h]”hŒthe ioctl number”…””}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j#h´Mhhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³j#h´MhhjÌubj¦)”}”(hŒ@``unsigned long arg`` pointer to the struct vtpmx_proxy_new_dev ”h]”(j¬)”}”(hŒ``unsigned long arg``”h]”j[)”}”(hjGh]”hŒunsigned long arg”…””}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1j«h³Œm/var/lib/git/docbuild/linux/Documentation/security/tpm/tpm_vtpm_proxy:49: ./drivers/char/tpm/tpm_vtpm_proxy.c”h´MihjAubjÆ)”}”(hhh]”j )”}”(hŒ)pointer to the struct vtpmx_proxy_new_dev”h]”hŒ)pointer to the struct vtpmx_proxy_new_dev”…””}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j\h´Mihj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅhjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³j\h´MihjÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj°ubj )”}”(hŒ**Description**”h]”j‹)”}”(hj‚h]”hŒ Description”…””}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œm/var/lib/git/docbuild/linux/Documentation/security/tpm/tpm_vtpm_proxy:49: ./drivers/char/tpm/tpm_vtpm_proxy.c”h´Mkhj°ubj )”}”(hXXCreates an anonymous file that is used by the process acting as a TPM to communicate with the client processes. The function will also add a new TPM device through which data is proxied to this TPM acting process. The caller will be provided with a file descriptor to communicate with the clients and major and minor numbers for the TPM device.”h]”hXXCreates an anonymous file that is used by the process acting as a TPM to communicate with the client processes. The function will also add a new TPM device through which data is proxied to this TPM acting process. The caller will be provided with a file descriptor to communicate with the clients and major and minor numbers for the TPM device.”…””}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³Œm/var/lib/git/docbuild/linux/Documentation/security/tpm/tpm_vtpm_proxy:49: ./drivers/char/tpm/tpm_vtpm_proxy.c”h´Mjhj°ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjÎh²hh³Nh´Nubeh}”(h]”Œuapi”ah ]”h"]”Œuapi”ah$]”h&]”uh1hµhh·h²hh³hÊh´K-ubeh}”(h]”Œ-virtual-tpm-proxy-driver-for-linux-containers”ah ]”h"]”Œ-virtual tpm proxy driver for linux containers”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jáŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j»j¸j>j;jËjÈj³j°uŒ nametypes”}”(j»‰j>‰jˉj³‰uh}”(j¸h·j;jjÈjAj°jÎjîj÷jþjjjuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.