diff --git a/src/extensions/map/cmduchecker.c b/src/extensions/map/cmduchecker.c
index 51cc819a64c453e19feb02e35bcc10425a2cdf3c..841095d2f3e2fbad55151e2f8e9a02e0db70fe06 100644
--- a/src/extensions/map/cmduchecker.c
+++ b/src/extensions/map/cmduchecker.c
@@ -224,6 +224,19 @@ bool DEFINE_FUNC(CMDU_TYPE_TOPOLOGY_RESPONSE)(struct cmdu_buff *cmdu,
 	return true;
 }
 
+bool DEFINE_FUNC(CMDU_TYPE_VENDOR_SPECIFIC)(struct cmdu_buff *cmdu,
+					    struct tlv *tv[][TLV_MAXNUM],
+					    size_t num_tv,
+					    uint8_t profile)
+{
+	trace("SA = " MACFMT ", profile = %d\n", MAC2STR(cmdu->origin), profile);
+
+	if (tlv_validate(TLV_TYPE_VENDOR_SPECIFIC, tv[0][0]))
+		return false;
+
+	return true;
+}
+
 enum CMDU_TYPE_AP_AUTOCONFIGURATION_SEARCH_ATTRS {
 	AP_CONFIG_SEARCH_ATTR_1905_AL_MACADDR,
 	AP_CONFIG_SEARCH_ATTR_SEARCHED_ROLE,
@@ -683,6 +696,7 @@ bool DEFINE_FUNC(CMDU_EARLY_AP_CAPABILITY_REPORT)(struct cmdu_buff *cmdu,
 struct map_cmdu_validator map_cmdu_validate[] = {
 	FUNC(CMDU_TYPE_TOPOLOGY_NOTIFICATION),
 	FUNC(CMDU_TYPE_TOPOLOGY_RESPONSE),
+	FUNC(CMDU_TYPE_VENDOR_SPECIFIC),
 	FUNC(CMDU_TYPE_AP_AUTOCONFIGURATION_SEARCH),
 	FUNC(CMDU_TYPE_AP_AUTOCONFIGURATION_RESPONSE),
 	FUNC(CMDU_TYPE_AP_AUTOCONFIGURATION_WSC),
diff --git a/src/extensions/map/r1.c b/src/extensions/map/r1.c
index 8cc688ad8fab8d6f82505c3a296a06e907128d0a..29f89b799ed2f2b43a9f35dc8d5c45fb90a606ef 100644
--- a/src/extensions/map/r1.c
+++ b/src/extensions/map/r1.c
@@ -76,7 +76,12 @@ DEFINE_POLICY(CMDU_TYPE_TOPOLOGY_RESPONSE) = {
 };
 
 DEFINE_POLICY(CMDU_TYPE_VENDOR_SPECIFIC) = {
-	/* user defined */
+	[0] = {
+		.type = TLV_TYPE_VENDOR_SPECIFIC,
+		.present = TLV_PRESENT_ONE,
+		.minlen = 3,
+	},
+	/* any number and/or type of tlvs may follow */
 };
 
 DEFINE_POLICY(CMDU_TYPE_LINK_METRIC_QUERY) = {
diff --git a/src/extensions/map/r2.c b/src/extensions/map/r2.c
index 3b4a195161b62f695bc971ec73ccaf0f5f36318d..a0cc962fe3ffbfa62608ede39a2dbfad2ba86cba 100644
--- a/src/extensions/map/r2.c
+++ b/src/extensions/map/r2.c
@@ -85,7 +85,12 @@ DEFINE_POLICY(CMDU_TYPE_TOPOLOGY_RESPONSE) = {
 };
 
 DEFINE_POLICY(CMDU_TYPE_VENDOR_SPECIFIC) = {
-	/* user defined */
+	[0] = {
+		.type = TLV_TYPE_VENDOR_SPECIFIC,
+		.present = TLV_PRESENT_ONE,
+		.minlen = 3,
+	},
+	/* any number and/or type of tlvs may follow */
 };
 
 DEFINE_POLICY(CMDU_TYPE_LINK_METRIC_QUERY) = {
diff --git a/src/extensions/map/r3.c b/src/extensions/map/r3.c
index 9f4b90d17e74d68ad6067973452815c228f7bcbf..a5d5259530df39fe1f47d7b6e5bc29a9ae876c81 100644
--- a/src/extensions/map/r3.c
+++ b/src/extensions/map/r3.c
@@ -85,7 +85,12 @@ DEFINE_POLICY(CMDU_TYPE_TOPOLOGY_RESPONSE) = {
 };
 
 DEFINE_POLICY(CMDU_TYPE_VENDOR_SPECIFIC) = {
-	/* user defined */
+	[0] = {
+		.type = TLV_TYPE_VENDOR_SPECIFIC,
+		.present = TLV_PRESENT_ONE,
+		.minlen = 3,
+	},
+	/* any number and/or type of tlvs may follow */
 };
 
 DEFINE_POLICY(CMDU_TYPE_LINK_METRIC_QUERY) = {
diff --git a/src/extensions/map/r4.c b/src/extensions/map/r4.c
index 77b3f4f5b442c76db8cdc01f7f72bbc7d9fe0efd..2c0cf8d63ed0c0d992a0692636ff0d924dd0b0f1 100644
--- a/src/extensions/map/r4.c
+++ b/src/extensions/map/r4.c
@@ -85,7 +85,12 @@ DEFINE_POLICY(CMDU_TYPE_TOPOLOGY_RESPONSE) = {
 };
 
 DEFINE_POLICY(CMDU_TYPE_VENDOR_SPECIFIC) = {
-	/* user defined */
+	[0] = {
+		.type = TLV_TYPE_VENDOR_SPECIFIC,
+		.present = TLV_PRESENT_ONE,
+		.minlen = 3,
+	},
+	/* any number and/or type of tlvs may follow */
 };
 
 DEFINE_POLICY(CMDU_TYPE_LINK_METRIC_QUERY) = {
diff --git a/src/extensions/map/r6.c b/src/extensions/map/r6.c
index 5448bbc544b93ea726555d961ee4bb4c1e647865..41973409e44f9e4604a52cd0e21caa8baf6004ac 100644
--- a/src/extensions/map/r6.c
+++ b/src/extensions/map/r6.c
@@ -100,7 +100,12 @@ DEFINE_POLICY(CMDU_TYPE_TOPOLOGY_RESPONSE) = {
 };
 
 DEFINE_POLICY(CMDU_TYPE_VENDOR_SPECIFIC) = {
-	/* user defined */
+	[0] = {
+		.type = TLV_TYPE_VENDOR_SPECIFIC,
+		.present = TLV_PRESENT_ONE,
+		.minlen = 3,
+	},
+	/* any number and/or type of tlvs may follow */
 };
 
 DEFINE_POLICY(CMDU_TYPE_LINK_METRIC_QUERY) = {
diff --git a/src/extensions/map/tlv_checker.c b/src/extensions/map/tlv_checker.c
index 88011ea11bc94b48fe4050bcb62980f22b161094..6dd20234a681a78345a07201ca94885104776a3d 100644
--- a/src/extensions/map/tlv_checker.c
+++ b/src/extensions/map/tlv_checker.c
@@ -74,6 +74,14 @@ int FUNC(TLV_TYPE_WSC)(const uint8_t *data, size_t datalen)
 	return ret;
 }
 
+int FUNC(TLV_TYPE_VENDOR_SPECIFIC)(const uint8_t *data, size_t datalen)
+{
+	if (datalen < 3)	/* atleast oui size */
+		return -1;
+
+	return 0;
+}
+
 int FUNC(MAP_TLV_SUPPORTED_SERVICE)(const uint8_t *data, size_t datalen)
 {
 	uint8_t num_services;
@@ -1909,6 +1917,7 @@ int FUNC(MAP_TLV_EHT_OPERATIONS)(const uint8_t *data, size_t datalen)
 /* List of TLV validators */
 struct tlv_validator tlv_validators[] = {
 	DEFINE_VALIDATOR(TLV_TYPE_WSC),
+	DEFINE_VALIDATOR(TLV_TYPE_VENDOR_SPECIFIC),
 	DEFINE_VALIDATOR(MAP_TLV_SUPPORTED_SERVICE),
 	DEFINE_VALIDATOR(MAP_TLV_SEARCHED_SERVICE),
 	DEFINE_VALIDATOR(MAP_TLV_AP_RADIO_IDENTIFIER),
diff --git a/src/extensions/map/tlv_checker.h b/src/extensions/map/tlv_checker.h
index 784cff8b76e37c6c629af9daf2a78f31793394e8..4c6335bc5a5e8c54c57f7f22df950f79a0b3036a 100644
--- a/src/extensions/map/tlv_checker.h
+++ b/src/extensions/map/tlv_checker.h
@@ -16,6 +16,7 @@
 #define DECL(t)	int validate_ ## t(const uint8_t *data, size_t datalen)
 
 DECL(TLV_TYPE_WSC);
+DECL(TLV_TYPE_VENDOR_SPECIFIC);
 
 DECL(MAP_TLV_SUPPORTED_SERVICE);
 DECL(MAP_TLV_SEARCHED_SERVICE);