lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <202107310213.WGo8CZVI-lkp@intel.com>
Date:   Sat, 31 Jul 2021 02:23:17 +0800
From:   kernel test robot <lkp@...el.com>
To:     Greg Kroah-Hartman <gregkh@...uxfoundation.org>
Cc:     kbuild-all@...ts.01.org, devel@...verdev.osuosl.org,
        linux-kernel@...r.kernel.org
Subject: [staging:staging-testing 160/164]
 drivers/staging/r8188eu/core/rtw_mlme.c:762:24: warning: variable 'pmlmeext'
 set but not used

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git staging-testing
head:   9b6818c1ac0e545c632265e4bf0aa1171347ebea
commit: 78f2b22efc8f7649dcde44143e78149457f1162c [160/164] staging: r8188eu: fix include directory mess
config: arc-allyesconfig (attached as .config)
compiler: arceb-elf-gcc (GCC) 10.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git/commit/?id=78f2b22efc8f7649dcde44143e78149457f1162c
        git remote add staging https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
        git fetch --no-tags staging staging-testing
        git checkout 78f2b22efc8f7649dcde44143e78149457f1162c
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-10.3.0 make.cross ARCH=arc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@...el.com>

All warnings (new ones prefixed by >>):

   drivers/staging/r8188eu/core/rtw_mlme.c: In function 'rtw_surveydone_event_callback':
>> drivers/staging/r8188eu/core/rtw_mlme.c:762:24: warning: variable 'pmlmeext' set but not used [-Wunused-but-set-variable]
     762 |  struct mlme_ext_priv *pmlmeext;
         |                        ^~~~~~~~
   In file included from drivers/staging/r8188eu/core/../include/drv_types.h:25,
                    from drivers/staging/r8188eu/core/rtw_mlme.c:8:
   At top level:
   drivers/staging/r8188eu/core/../include/rtw_security.h:312:28: warning: 'K' defined but not used [-Wunused-const-variable=]
     312 | static const unsigned long K[64] = {
         |                            ^
--
   drivers/staging/r8188eu/core/rtw_sta_mgt.c: In function 'rtw_mfree_all_stainfo':
>> drivers/staging/r8188eu/core/rtw_sta_mgt.c:169:19: warning: variable 'psta' set but not used [-Wunused-but-set-variable]
     169 |  struct sta_info *psta = NULL;
         |                   ^~~~
   In file included from drivers/staging/r8188eu/core/../include/drv_types.h:25,
                    from drivers/staging/r8188eu/core/rtw_sta_mgt.c:7:
   At top level:
   drivers/staging/r8188eu/core/../include/rtw_security.h:312:28: warning: 'K' defined but not used [-Wunused-const-variable=]
     312 | static const unsigned long K[64] = {
         |                            ^
--
   drivers/staging/r8188eu/hal/rtl8188eu_recv.c: In function 'rtl8188eu_init_recv_priv':
>> drivers/staging/r8188eu/hal/rtl8188eu_recv.c:41:8: warning: cast between incompatible function types from 'void (*)(void *)' to 'void (*)(long unsigned int)' [-Wcast-function-type]
      41 |        (void(*)(unsigned long))rtl8188eu_recv_tasklet,
         |        ^
   In file included from drivers/staging/r8188eu/hal/../include/drv_types.h:25,
                    from drivers/staging/r8188eu/hal/rtl8188eu_recv.c:6:
   At top level:
   drivers/staging/r8188eu/hal/../include/rtw_security.h:312:28: warning: 'K' defined but not used [-Wunused-const-variable=]
     312 | static const unsigned long K[64] = {
         |                            ^
--
   drivers/staging/r8188eu/hal/rtl8188eu_xmit.c: In function 'rtl8188eu_init_xmit_priv':
>> drivers/staging/r8188eu/hal/rtl8188eu_xmit.c:17:8: warning: cast between incompatible function types from 'void (*)(void *)' to 'void (*)(long unsigned int)' [-Wcast-function-type]
      17 |        (void(*)(unsigned long))rtl8188eu_xmit_tasklet,
         |        ^
   In file included from drivers/staging/r8188eu/hal/../include/drv_types.h:25,
                    from drivers/staging/r8188eu/hal/rtl8188eu_xmit.c:6:
   At top level:
   drivers/staging/r8188eu/hal/../include/rtw_security.h:312:28: warning: 'K' defined but not used [-Wunused-const-variable=]
     312 | static const unsigned long K[64] = {
         |                            ^
--
   drivers/staging/r8188eu/os_dep/osdep_service.c: In function 'rtw_buf_update':
>> drivers/staging/r8188eu/os_dep/osdep_service.c:393:6: warning: variable 'ori_len' set but not used [-Wunused-but-set-variable]
     393 |  u32 ori_len = 0, dup_len = 0;
         |      ^~~~~~~
   In file included from drivers/staging/r8188eu/os_dep/../include/drv_types.h:25,
                    from drivers/staging/r8188eu/os_dep/osdep_service.c:7:
   At top level:
   drivers/staging/r8188eu/os_dep/../include/rtw_security.h:312:28: warning: 'K' defined but not used [-Wunused-const-variable=]
     312 | static const unsigned long K[64] = {
         |                            ^
--
>> drivers/staging/r8188eu/core/rtw_security.c:1666: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
    * Expand the cipher key into the encryption key schedule.
   drivers/staging/r8188eu/core/rtw_security.c:1691: warning: Function parameter or member 'FunctionContext' not described in 'rtw_use_tkipkey_handler'
>> drivers/staging/r8188eu/core/rtw_security.c:1691: warning: expecting prototype for omac1_aes_128(). Prototype was for rtw_use_tkipkey_handler() instead
--
>> drivers/staging/r8188eu/core/rtw_ieee80211.c:938: warning: expecting prototype for ieee802_11_parse_elems(). Prototype was for rtw_ieee802_11_parse_elems() instead
--
>> drivers/staging/r8188eu/os_dep/rtw_android.c:53: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
    * Local (static) functions and variables
--
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:46: warning: Function parameter or member 'BitMask' not described in 'phy_CalculateBitShift'
>> drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:46: warning: expecting prototype for Function(). Prototype was for phy_CalculateBitShift() instead
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:76: warning: Function parameter or member 'Adapter' not described in 'rtl8188e_PHY_QueryBBReg'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:76: warning: Function parameter or member 'RegAddr' not described in 'rtl8188e_PHY_QueryBBReg'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:76: warning: Function parameter or member 'BitMask' not described in 'rtl8188e_PHY_QueryBBReg'
>> drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:76: warning: expecting prototype for Function(). Prototype was for rtl8188e_PHY_QueryBBReg() instead
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:104: warning: Function parameter or member 'Adapter' not described in 'rtl8188e_PHY_SetBBReg'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:104: warning: Function parameter or member 'RegAddr' not described in 'rtl8188e_PHY_SetBBReg'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:104: warning: Function parameter or member 'BitMask' not described in 'rtl8188e_PHY_SetBBReg'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:104: warning: Function parameter or member 'Data' not described in 'rtl8188e_PHY_SetBBReg'
>> drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:104: warning: expecting prototype for Function(). Prototype was for rtl8188e_PHY_SetBBReg() instead
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:144: warning: Function parameter or member 'Adapter' not described in 'phy_RFSerialRead'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:144: warning: Function parameter or member 'eRFPath' not described in 'phy_RFSerialRead'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:144: warning: Function parameter or member 'Offset' not described in 'phy_RFSerialRead'
>> drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:144: warning: expecting prototype for Function(). Prototype was for phy_RFSerialRead() instead
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:235: warning: duplicate section name 'Note'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:243: warning: Function parameter or member 'Adapter' not described in 'phy_RFSerialWrite'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:243: warning: Function parameter or member 'eRFPath' not described in 'phy_RFSerialWrite'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:243: warning: Function parameter or member 'Offset' not described in 'phy_RFSerialWrite'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:243: warning: Function parameter or member 'Data' not described in 'phy_RFSerialWrite'
>> drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:243: warning: expecting prototype for Function(). Prototype was for phy_RFSerialWrite() instead
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:287: warning: Function parameter or member 'Adapter' not described in 'rtl8188e_PHY_QueryRFReg'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:287: warning: Function parameter or member 'eRFPath' not described in 'rtl8188e_PHY_QueryRFReg'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:287: warning: Function parameter or member 'RegAddr' not described in 'rtl8188e_PHY_QueryRFReg'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:287: warning: Function parameter or member 'BitMask' not described in 'rtl8188e_PHY_QueryRFReg'
>> drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:287: warning: expecting prototype for Function(). Prototype was for rtl8188e_PHY_QueryRFReg() instead
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:323: warning: Function parameter or member 'Adapter' not described in 'rtl8188e_PHY_SetRFReg'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:323: warning: Function parameter or member 'eRFPath' not described in 'rtl8188e_PHY_SetRFReg'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:323: warning: Function parameter or member 'RegAddr' not described in 'rtl8188e_PHY_SetRFReg'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:323: warning: Function parameter or member 'BitMask' not described in 'rtl8188e_PHY_SetRFReg'
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:323: warning: Function parameter or member 'Data' not described in 'rtl8188e_PHY_SetRFReg'
>> drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:323: warning: expecting prototype for Function(). Prototype was for rtl8188e_PHY_SetRFReg() instead
   drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:389: warning: Function parameter or member 'Adapter' not described in 'phy_InitBBRFRegisterDefinition'
>> drivers/staging/r8188eu/hal/rtl8188e_phycfg.c:389: warning: expecting prototype for Function(). Prototype was for phy_InitBBRFRegisterDefinition() instead
--
>> drivers/staging/r8188eu/os_dep/ioctl_linux.c:110: warning: expecting prototype for hwaddr_aton(). Prototype was for hwaddr_aton_i() instead


vim +/pmlmeext +762 drivers/staging/r8188eu/core/rtw_mlme.c

15865124feed88 Phillip Potter 2021-07-28  758  
15865124feed88 Phillip Potter 2021-07-28  759  void rtw_surveydone_event_callback(struct adapter	*adapter, u8 *pbuf)
15865124feed88 Phillip Potter 2021-07-28  760  {
15865124feed88 Phillip Potter 2021-07-28  761  	struct	mlme_priv *pmlmepriv = &(adapter->mlmepriv);
15865124feed88 Phillip Potter 2021-07-28 @762  	struct mlme_ext_priv *pmlmeext;
15865124feed88 Phillip Potter 2021-07-28  763  	u8 timer_cancelled = 0;
15865124feed88 Phillip Potter 2021-07-28  764  
15865124feed88 Phillip Potter 2021-07-28  765  	spin_lock_bh(&pmlmepriv->lock);
15865124feed88 Phillip Potter 2021-07-28  766  
15865124feed88 Phillip Potter 2021-07-28  767  	if (pmlmepriv->wps_probe_req_ie) {
15865124feed88 Phillip Potter 2021-07-28  768  		pmlmepriv->wps_probe_req_ie_len = 0;
15865124feed88 Phillip Potter 2021-07-28  769  		kfree(pmlmepriv->wps_probe_req_ie);
15865124feed88 Phillip Potter 2021-07-28  770  		pmlmepriv->wps_probe_req_ie = NULL;
15865124feed88 Phillip Potter 2021-07-28  771  	}
15865124feed88 Phillip Potter 2021-07-28  772  
15865124feed88 Phillip Potter 2021-07-28  773  	RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("rtw_surveydone_event_callback: fw_state:%x\n\n", get_fwstate(pmlmepriv)));
15865124feed88 Phillip Potter 2021-07-28  774  
15865124feed88 Phillip Potter 2021-07-28  775  	if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) {
15865124feed88 Phillip Potter 2021-07-28  776  		timer_cancelled = 1;
15865124feed88 Phillip Potter 2021-07-28  777  
15865124feed88 Phillip Potter 2021-07-28  778  		_clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
15865124feed88 Phillip Potter 2021-07-28  779  	} else {
15865124feed88 Phillip Potter 2021-07-28  780  		RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("nic status=%x, survey done event comes too late!\n", get_fwstate(pmlmepriv)));
15865124feed88 Phillip Potter 2021-07-28  781  	}
15865124feed88 Phillip Potter 2021-07-28  782  
15865124feed88 Phillip Potter 2021-07-28  783  	spin_unlock_bh(&pmlmepriv->lock);
15865124feed88 Phillip Potter 2021-07-28  784  
15865124feed88 Phillip Potter 2021-07-28  785  	if (timer_cancelled)
15865124feed88 Phillip Potter 2021-07-28  786  		_cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled);
15865124feed88 Phillip Potter 2021-07-28  787  
15865124feed88 Phillip Potter 2021-07-28  788  	spin_lock_bh(&pmlmepriv->lock);
15865124feed88 Phillip Potter 2021-07-28  789  	rtw_set_signal_stat_timer(&adapter->recvpriv);
15865124feed88 Phillip Potter 2021-07-28  790  
15865124feed88 Phillip Potter 2021-07-28  791  	if (pmlmepriv->to_join) {
15865124feed88 Phillip Potter 2021-07-28  792  		if ((check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == true)) {
15865124feed88 Phillip Potter 2021-07-28  793  			if (check_fwstate(pmlmepriv, _FW_LINKED) == false) {
15865124feed88 Phillip Potter 2021-07-28  794  				set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
15865124feed88 Phillip Potter 2021-07-28  795  
15865124feed88 Phillip Potter 2021-07-28  796  				if (rtw_select_and_join_from_scanned_queue(pmlmepriv) == _SUCCESS) {
15865124feed88 Phillip Potter 2021-07-28  797  					_set_timer(&pmlmepriv->assoc_timer, MAX_JOIN_TIMEOUT);
15865124feed88 Phillip Potter 2021-07-28  798  				} else {
15865124feed88 Phillip Potter 2021-07-28  799  					struct wlan_bssid_ex    *pdev_network = &(adapter->registrypriv.dev_network);
15865124feed88 Phillip Potter 2021-07-28  800  					u8 *pibss = adapter->registrypriv.dev_network.MacAddress;
15865124feed88 Phillip Potter 2021-07-28  801  
15865124feed88 Phillip Potter 2021-07-28  802  					_clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
15865124feed88 Phillip Potter 2021-07-28  803  
15865124feed88 Phillip Potter 2021-07-28  804  					RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("switching to adhoc master\n"));
15865124feed88 Phillip Potter 2021-07-28  805  
15865124feed88 Phillip Potter 2021-07-28  806  					memset(&pdev_network->Ssid, 0, sizeof(struct ndis_802_11_ssid));
15865124feed88 Phillip Potter 2021-07-28  807  					memcpy(&pdev_network->Ssid, &pmlmepriv->assoc_ssid, sizeof(struct ndis_802_11_ssid));
15865124feed88 Phillip Potter 2021-07-28  808  
15865124feed88 Phillip Potter 2021-07-28  809  					rtw_update_registrypriv_dev_network(adapter);
15865124feed88 Phillip Potter 2021-07-28  810  					rtw_generate_random_ibss(pibss);
15865124feed88 Phillip Potter 2021-07-28  811  
15865124feed88 Phillip Potter 2021-07-28  812  					pmlmepriv->fw_state = WIFI_ADHOC_MASTER_STATE;
15865124feed88 Phillip Potter 2021-07-28  813  
15865124feed88 Phillip Potter 2021-07-28  814  					if (rtw_createbss_cmd(adapter) != _SUCCESS)
15865124feed88 Phillip Potter 2021-07-28  815  						RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("Error=>rtw_createbss_cmd status FAIL\n"));
15865124feed88 Phillip Potter 2021-07-28  816  					pmlmepriv->to_join = false;
15865124feed88 Phillip Potter 2021-07-28  817  				}
15865124feed88 Phillip Potter 2021-07-28  818  			}
15865124feed88 Phillip Potter 2021-07-28  819  		} else {
15865124feed88 Phillip Potter 2021-07-28  820  			int s_ret;
15865124feed88 Phillip Potter 2021-07-28  821  			set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
15865124feed88 Phillip Potter 2021-07-28  822  			pmlmepriv->to_join = false;
15865124feed88 Phillip Potter 2021-07-28  823  			s_ret = rtw_select_and_join_from_scanned_queue(pmlmepriv);
15865124feed88 Phillip Potter 2021-07-28  824  			if (_SUCCESS == s_ret) {
15865124feed88 Phillip Potter 2021-07-28  825  			     _set_timer(&pmlmepriv->assoc_timer, MAX_JOIN_TIMEOUT);
15865124feed88 Phillip Potter 2021-07-28  826  			} else if (s_ret == 2) { /* there is no need to wait for join */
15865124feed88 Phillip Potter 2021-07-28  827  				_clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
15865124feed88 Phillip Potter 2021-07-28  828  				rtw_indicate_connect(adapter);
15865124feed88 Phillip Potter 2021-07-28  829  			} else {
15865124feed88 Phillip Potter 2021-07-28  830  				DBG_88E("try_to_join, but select scanning queue fail, to_roaming:%d\n",
15865124feed88 Phillip Potter 2021-07-28  831  					pmlmepriv->to_roaming);
15865124feed88 Phillip Potter 2021-07-28  832  				if (rtw_to_roaming(adapter) != 0) {
15865124feed88 Phillip Potter 2021-07-28  833  					if (--pmlmepriv->to_roaming == 0 ||
15865124feed88 Phillip Potter 2021-07-28  834  					    _SUCCESS != rtw_sitesurvey_cmd(adapter, &pmlmepriv->assoc_ssid, 1, NULL, 0)) {
15865124feed88 Phillip Potter 2021-07-28  835  						rtw_set_roaming(adapter, 0);
15865124feed88 Phillip Potter 2021-07-28  836  						rtw_free_assoc_resources(adapter, 1);
15865124feed88 Phillip Potter 2021-07-28  837  						rtw_indicate_disconnect(adapter);
15865124feed88 Phillip Potter 2021-07-28  838  					} else {
15865124feed88 Phillip Potter 2021-07-28  839  						pmlmepriv->to_join = true;
15865124feed88 Phillip Potter 2021-07-28  840  					}
15865124feed88 Phillip Potter 2021-07-28  841  				} else {
15865124feed88 Phillip Potter 2021-07-28  842  					rtw_indicate_disconnect(adapter);
15865124feed88 Phillip Potter 2021-07-28  843  				}
15865124feed88 Phillip Potter 2021-07-28  844  				_clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
15865124feed88 Phillip Potter 2021-07-28  845  			}
15865124feed88 Phillip Potter 2021-07-28  846  		}
15865124feed88 Phillip Potter 2021-07-28  847  	}
15865124feed88 Phillip Potter 2021-07-28  848  
15865124feed88 Phillip Potter 2021-07-28  849  	indicate_wx_scan_complete_event(adapter);
15865124feed88 Phillip Potter 2021-07-28  850  
15865124feed88 Phillip Potter 2021-07-28  851  	spin_unlock_bh(&pmlmepriv->lock);
15865124feed88 Phillip Potter 2021-07-28  852  
15865124feed88 Phillip Potter 2021-07-28  853  	if (check_fwstate(pmlmepriv, _FW_LINKED) == true)
15865124feed88 Phillip Potter 2021-07-28  854  		p2p_ps_wk_cmd(adapter, P2P_PS_SCAN_DONE, 0);
15865124feed88 Phillip Potter 2021-07-28  855  
15865124feed88 Phillip Potter 2021-07-28  856  	rtw_os_xmit_schedule(adapter);
15865124feed88 Phillip Potter 2021-07-28  857  
15865124feed88 Phillip Potter 2021-07-28  858  	pmlmeext = &adapter->mlmeextpriv;
15865124feed88 Phillip Potter 2021-07-28  859  

:::::: The code at line 762 was first introduced by commit
:::::: 15865124feed880978b79839c756ef6cbb4ec6b3 staging: r8188eu: introduce new core dir for RTL8188eu driver

:::::: TO: Phillip Potter <phil@...lpotter.co.uk>
:::::: CC: Greg Kroah-Hartman <gregkh@...uxfoundation.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

Download attachment ".config.gz" of type "application/gzip" (68430 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ